《第一行代码Android》第2版试题范围.docx
《《第一行代码Android》第2版试题范围.docx》由会员分享,可在线阅读,更多相关《《第一行代码Android》第2版试题范围.docx(42页珍藏版)》请在冰豆网上搜索。
《第一行代码Android》第2版试题范围
-《第一行代码Android》(第2版)试题范围及答案
//--------------------------------------------------------------第1章
1.简述下Android系统的四层架构。
1)Linux内核层:
Android系统是基于Linux内核的,这一层为Android设备的各种硬件提供了底层的驱动。
如显示驱动、音频驱动、照相机驱动、蓝牙驱动,Wi-Fi驱动、电源管理等
2)系统运行库层:
这一层通过一些C/C+库来为Android系统提供了主要的特性支持。
如SQLite库提供了数据库库的支持,OpenGL/ES库提供了3D绘图的支持,webkit库提供了浏览器内核的支持等
3)应用框架层:
这一层主要提供了构建应用程序时可能用到的各种API,Android自带的一些核心应用就是使用这些API完成的、开发者也可以通过使用这些API来构建自己的应用程序
4)应用层:
所有安装在手机上的应用程序都是属于这一层的,比如系统自带的联系人、短信等程序,或者是你从Google play上下载的小游戏,当然还包括你自己开发的程序。
2.简述下Android ver5.0、6.0、7.0、8.0各版本的系统代号和API版本号。
版本号
系统代号
API
5.0
Lollipop
21
6.0
Marshmallow
23
7.0
Nougat
24
8.0
Oreo
26
3. Android的四大组件有哪些?
使用时需要注册到哪个文件中?
1)Android系统四大组件分别是活动(activity)、服务(Server)、广播接收器(broadcastreceiver)和内容提供器(contentprovider),
2)android新创建四大组件需要在Manifest文件中注册
4. 搭建Android开发环境需要哪些软件工具,试着列举出其中一套开发环境方案。
方案1)JDK+AndroidSDK+AndroidStudio ,还有虚拟机AVD等可以在安装完AndroidStudio之后在软件内下载。
方案2)JDK+AndroidSDK +Eclipse+ADT。
5.请写出缩略语SDK、AVD、DDMS的中、英文解释
1)SDK:
软件开发工具包。
2)AVD:
AndroidVirtualDevice,就是Android运行的虚拟设备,他是Android的模拟器识别。
3)DDMS:
DalvikDebugMonitorService,是Android开发环境中的Dalvik虚拟机调试监控服务。
6.导入项目时需要对项目进行配置,涉及清单文件以及gradle的3个配置文件,请列举出这3个文件名称(含具体项目路径)。
在“Android”过滤器下,这3个文件在GradleScript节点内:
1)project\build.gradle
2)Module\build.gradle
3)gradle-wrapper.properties文件
在“Project”过滤器下,这3个文件名称为:
1)项目下面的build.gradle(即project\build.gradle)
2)app下面的build.gradle(即Module\build.gradle)
3)在项目文件目录,依次打开gradle/wrapper文件夹,并打开gradle-wrapper.properties文件
7.试着写出创建一个简单活动HelloWorldActivity的基本代码。
publicclassHelloWorldActivity extendsAppCompatActivity{
@Override
protected voidonCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.hello_world_layout);
}
}
8.请说明,项目res目录下的各个子目录(drawable、layout、mipmap、values)的功能。
1)drawable开头的文件夹都是用来放图片的。
2)layout文件夹是用来放布局文件的。
3)所有以mipmap开头的文件夹都是用来放应用图标的。
4)所有以values开头的文件夹都是用来放字符串、样式、颜色等配置的。
9.如果需要在gradle中加入一个外部类库appcompat-v7:
27+,应如何配置依赖?
请写出要配置的文件和相关代码。
在项目app\build.gradle中添加相应的依赖库,如下:
dependencies{
compile 'com.android.support:
appcompat-v7:
27.+'
}
10.app目录下的build.gradle文件的部分代码如下,请相应注释处给出功能解释。
applyplugin:
'com.android.application'//表示这是一个应用程序模块ﻫandroid{
compileSdkVersion 25//编译版本ﻫ buildToolsVersion"25.0.3"//项目构建工具的版本
defaultConfig{ﻫapplicationId"com.example.dell.ch_2_6"//项目包名ﻫ minSdkVersion22//最低兼容的Android版本
targetSdkVersion 25
versionCode1//项目的版本号
versionName"1.0"//项目的版本名
testInstrumentationRunner"android.support.test.runner.AndroidJUnitRunner"ﻫ }
buildTypes{ﻫ release{
minifyEnabledfalse//用来指定是否对项目的代码进行混淆false表示不混淆。
proguardFiles//用来指定混淆时使用的规则文件。
getDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro'
//.txt是在AndroidSDK 目录下的,里面是所有项目通用的混淆规则。
//.pro是当前项目的根目录的,里面可以编写当前项目特有的混淆规则。
}
}ﻫ}ﻫdependencies{
compilefileTree(dir:
'libs',include:
['*.jar'])//本地依赖声明。
androidTestCompile('com.android.support.test.espresso:
espresso-core:
2.2.2',//远程依赖声明。
{ excludegroup:
'com.android.support', module:
'support-annotations'
})
compile'com.android.support:
appcompat-v7:
25.3.1'
compile'com.android.support.constraint:
constraint-layout:
1.0.2'
testCompile 'junit:
junit:
4.12'//用于声明测试用例库的
}
11.请列举log工具的几个输出日志的常用方法,并简述其功能。
1)Log.v()用于打印最为详细的日志信息。
2)Log.d()用于打印一些调试信息。
3)Log.i()用于打印一些比较重要的信息
4)Log.w()用于打印一些警告信息
5)Log.e()用于打印程序中的错误信息
//-------------------------------2
1. 简述下Activity的管理模式。
Android是使用任务(Task)来管理活动的,一个任务就是一组存放在栈里的活动的集合,这个栈也被称为返回栈(BackStack)。
栈是一种“后进先出”的数据结构,默认情况下,新创建的活动会处于栈顶的位置,而当我们按下back键或调用finish()方法去销毁一个活动时,处于栈顶的活动就会出栈。
2.简述下活动的四种状态。
1)运行状态:
活动处于栈顶时就处于运行状态;
2)暂停状态:
当活动不处于栈顶,但可见,就进入暂停状态;
3)停止状态:
当活动不处于栈顶,且完全不可见,就进入暂停状态,系统可能会暂时保存活动的状态,但也可能被系统回收;
4)销毁状态:
活动从返回栈中移除后就进入销毁状态。
系统优先回收这种状态的活动。
3.活动的生命周期包括7个回调函数,简述下活动的3个生存期都对应着哪些回调函数。
1)完整生命周期:
即从一个Activity从出现到消失,对应的周期方法是从onCreate()到onDestroy()。
2)可见生命周期:
当Activity处于可以用户看见的状态,但不一定能与用户交互时,将多次执行从onStart()到onStop()。
3)前台生命周期:
当Activity处于Activity栈最顶端,能够与其他用户进行交互时,将多次执行从onResume()到onPause()。
4.活动时如何保存实例状态的。
Activity中还提供了一个onSaveInstanceState()回调方法,这个方法可以保证在活动被回收之前一定会被调用,因此我们可以通过这个方法来解决活动被回收时临时数据得不到保存的问题。
5.活动的启动模式包括哪几种?
standard、singleTop、singleTask和singleInstance
6. 如何将一个Activity设置成对话框的样式。
答:
第一种方法,在styles.xml文件中,可以新建如下的类似Dialog的style。
style/Theme.Dialog”>。
第二种方法,在AndroidManifest.xml中在需要显示为窗口的Activity中添加如下属性:
android:
theme=“@style/Theme.FloatActivity”即可。
也可以直接添加对应需要展示为Dialogstyle的Activity的android:
theme属性为android:
theme=“@android:
style/Theme.Dialog”。
7.两个Activity之间怎么传递数据?
答:
可以在Intent对象中利用Extra来传递存储数据。
1)在Intent的对象请求中,使用putExtra(“键值对的名字”,”键值对的值”);
Intentintent=newIntent(FirstActivity.this,SecondActivity.class);
intent.putExtra(“testIntent”,data);
2)在另外一个Activity中将Intent中的请求数据取出来:
Intentintent=getIntent();
String value=intent.getStringExtra(“testIntent”);
//-------------------------------3
1.请说明布局文件中id=”@id/控件名”...>与< android:
id=”@+id/控件名”...>两者的区别。
Android中的组件需要用一个int类型的值来表示,这个值也就是组件标签中的id属性值。
id属性只能接受资源类型的值,也就是必须以@开头的值,例如,@id/控件名、@+id/控件名等。
1)其中“@id/控件名”代表控件名为android系统中已存在的资源id,例如,已经定义在values\ids.xml文件中的id;
2)”@+id/控件名” 代表当R.java中存在名为name变量时,则该组件会使用该变量的值作为标识。
如果不存在该变量,则添加一个新的变量,并为该变量赋相应的值。
2.请简要列出Android中常用的几种布局名称(5种以上)
LinearLayout(线性布局)、RelativeLayout(相对布局)、FrameLayout(帧布局)、AbsoluteLayout(绝对布局)、TableLayout(表格布局)、ConstraintLayout(约束性布局)
3.假设已有一个布局文件title.xml,请以代码说明在一个布局中引入其它布局的方法。
直接引用的方法:
<includelayout=”@layout/title”/>
4.在高版本的AndroidUI系统中已经不再使用ActionBar,如何在代码中隐藏它?
ActionBaractionBar=getSupportActionBar();
if(actionBar!
=null){
actionBar.hide();
}
5.假设已有一个布局文件title.xml,请写出动态加载这个布局文件的代码。
动态加载的方法:
LayoutInflater.from(context).inflate(R.layout.title);
6.已知SimpleAdapter类的构造方法如下:
SimpleAdapter(Context context, List
extendsMap>>data, intresource,String[]from,int[]to),请简要说明各个参数的作用。
1)context:
上下文,就是当前Activity
2)data:
数据源,一个Map所组成的List集合,每一个Map都会去对应ListView列表中的一行,每一个Map中的键必须包含所有在from中指定的键
3)resource:
列表项的布局文件id
4)from:
Map中的键名
5)to:
绑定数据视图中的id,与from成对应关系
//--------------------4
1.请以代码说明动态添加碎片(Fragment)的方法。
1)在主布局文件中使用<FrameLayout>标记引入要容纳碎片的布局名,例如:
id=”@+id/right_layout”…>
2)在代码中使用replace()方法进行替换,例如:
FragmentManagerfragmentManager=getSupportFragmentManager();
FragmentTransactiontransaction=fragmentManager.beginTransaction();
transaction.replace(R.id.right_layout,newAnotherRightFragment);
transcatimit();
2.请以代码说明碎片(Fragment)与活动(Activity)之间通信的方法。
1)从布局文件中获取碎片的实例:
RightFragmentrightFragment = (RightFragment) getSupportFragmentManageer().findFragmentById(R.id.right_fragment);
2)从碎片中获取活动的实例:
MainActivityactivity =(MainActivity)getActivity();
3.请简述AndroidUI布局中sp和dp这两个单位之间的区别
1)dp(或者dipdevice independent pixels)
一种基于屏幕密度的抽象单位。
在每英寸160点的显示器上,1dp=1px。
不同设备有不同的显示效果,这个和设备硬件有关。
2)sp(ScaledPixels)
主要用于字体显示,与刻度无关的一种像素,与dp类似,但是可以根据用户的字体大小首选项进行缩放。
//----------------------------5
1.简述广播的两种类型(标准广播和有序广播)的区别。
(1)标准广播是一种完全异步执行的广播,在广播发出去之后,所有的广播接收器几乎同时接收到这条广播消息,它们之间没有任何项目顺序可言。
这种广播的效率比较高,但也意味着它是无法被截断的。
(2)有序广播是一种同步执行的广播,在广播发出之后,同一时刻只会有一个广播接收器能够收到这条广播消息,当这个广播接收器中的逻辑执行完毕后,广播才会继续传递。
此时的广播接收器是有先后顺序,优先级高的广播接收器就可以先收到广播消息,并且前面的广播接收器还可以截断正在传递的广播,这样后面的广播接收器就无法收到广播消息了。
2.为了接收广播,需要对要接收的广播进行注册,请简要描述“动态注册”和“静态注册”的区别。
(1)静态注册直接在清单文件(AndroidManifest)中进行注册。
程序在未启动时就能接收到广播。
(2)动态注册直接在代码中进行注册。
通过调用Context的registerReceiver函数。
可以自由控制注册与注销。
3.请使用代码说明,动态注册一个能够监听网络变化功能的广播接收器。
IntentFilter intentFilter=newIntentFilter();
intentFilter.addAction("and.conn.CONNECTIVITYCHANGE");
NetworkChangeReceivernetworkChangeReceiver=new NetworkChangeReceiver();
registerReceiver(networkChangeReceiver,intentFilter);
4.请使用代码说明,静态注册实现开机启动的广播接收器。
<manifestxmlns:
android=”http//schemas.android.com/apk/res/android”
package”com.example.boradcasttest”>
<user-permissionandroid:
name=”android.permission.ACCESS_NETWORK_STATE’/>
name=”android.permission.RECEIVE_BOOT_COMPLETED”/>
ﻩAndroid:
allowBackup=”true”
ﻩAndroid:
icon=”@mipmap/ic_launcher”
Android:
label+”@string/app_name”
Android:
supportsRtl=”true”
Android:
theme=”@style/apptheme”>
…..
Android:
name=”.BootComleteReceiver”
Android:
enabled=”true”
ﻩAndroid:
exported=”true”
ﻩ<actionandroid:
name=”android.intent.action.BOOT_COMPLETED”/>
ﻩ
</receiver>
</application>
5.请使用代码说明,发送和接收自定义广播的方法。
1)发送标准广播:
首先自定义一个广播接收器,来定义接收相应广播时要处理的内容:
public classMyBroadcastReceiver extendsBroadcastReceiver{
@Override
publicvoidonReceive(Contextcontext,Intent intent){
Toast.makeText(context,"received in MyBroadcastReceiver",Toast.LENGTH_SHORT).show();
}
}
2)然后在清单文件AndroidManifest.xml中过滤此广播:
android:
name=".MyBroadcastReceiver"
android:
enabled="true"
android:
exported="true">
name="com.example.broadcasttest.MY_BROADCAST"/>
</intent-filter>
3)最后,可以在代码中发送此广播,进行测试:
Intent intent=new Intent("com.example.broadcasttest. MY_BROADCAST");
sendBroadcast(intent);//发送本地广播
6.请使用代码说明,发送有序广播的注册、发送、设定优先级、和终止传递的方法。
前三个步骤与发送标准广播的步骤相同:
1)首先自定义一个广播接收器,来定义接收相应广播时要处理的内容:
publicclassAnotherBroadcastReceiverextendsBroadcastReceiver{
@Override
publicvoidonReceive(Contextcontext, Intentintent){
Toast. makeText(context,"receivedinAnotherBroadcastReceiver",
Toast.LENGTHSHORT).show();
}
}
2)然后在清单文件AndroidManifest.xml中过滤此广播:
android:
name=".AnotherBroadcastReceiver "
android:
enabled="true"
android:
exported="true">
<intent-filterandroid:
priority="100">
<action android:
name="com.example.broadcasttest.MY_BROADCAST"/>
</receiver>
3)最后,可以在代码中发送此广播,进行测试:
Intentintent=new Intent("com.example.broadcasttest. MY_BROADCAST");
sendOrderBroadcast(intent,null);// 发送本