资源描述
AnjoyoAndroid02章节考试题
精品文档
AnjoyoAndroid第二章考试题
一、 选择题:(共20题,每题3分)
1. 下列关于Activity的说法正确的一个选项是( C )。
① Activity是Android的四大组件之一。
② Activity在实现中通常作为一个Java类出现。
③ Activity是一个用来提供用户交互界面的组件。
④ Activity使一个应用程序的指定数据集提供给其它应用程序。
⑤ 当一个Activity启动另一个Activity时,就需要使用到Intent,它起到媒介的作用。
⑥ 每一个Android应用都必须要有一个叫做“MainActivity”的入口Activity。
⑦ 入口Activity会作为初始界面在应用关闭时再展示给用户。
⑧ 每个Activity都可以启动另一个Activity。
A、①③④⑥⑧ B、②⑤⑥⑦⑧ C、①②③⑤⑧ D、①②③④⑦
2. 下列关于使用一个Activity说法错误的一个选项是( A )。
① 需要首先实现一个继承自Activity的子类。
② 重写父类中的一些方法。
③ 一般都会重写onCreate(),这个方法是在Activity被关闭时自动调用的。
④ 重写的onCreate()方法是具有参数的,也有返回值。
⑤ onCreate()方法的参数是一个Bundle类型的对象。
⑥ Bundle类与Map一样,是一个key-value类型。
⑦ 在四大组件之间传递数据时,Bundle常被用来存储数据。
⑧ Bundle的key只能为String,而value则没有限制。
⑨ Bundle类型的参数用来处理Activity状态信息的保存与恢复。
A、①②⑤⑥⑧⑨ B、②④⑤⑥⑦⑧ C、①③④⑤⑥⑧ D、①②③⑦⑧⑨
3. 下列关于Activity描述不正确的是( B )。
A、每一个Activity都必须在AndroidManifest.xml文件中进行配置。
B、关于Activity生命周期的各个方法相同点就是它们自动调用的时机不同。
C、我们只能使用鼠标选择这种方式完成配置,而不能用手写代码这种方式完成配置。
D、Activity的生命周期构成方法有onCreate()、onStart()、onResume()、onPause()、onStop()、onDestroy()和onRestart()七种。
4. 在Activity生命周期中的各个方法,它们在不同状态下的调用顺序不正确的一个选项是( D )。
① 初次启动一个Activity时的执行过程是:依次执行了onCreate() 、onStart() 和onResume()方法。
② 当Activity启动后,点击“返回”按钮,这时Activity的执行顺序是:onPause() -> onStop() -> onStop()。
③ 启动一个Activity时的执行过程是:依次执行了onCreate() 、onStart() 和onResume()方法。
④ 在Activity被启动之后,点击Home按钮,这时Activity的执行顺序是:onPause() -> onStop()。
⑤ 点击Home按钮后,系统回到桌面,然后我们再找到这个应用并打开,这时Activity的执行顺序是:onRestart() -> onCreate() -> onStart() -> onResume()。
⑥ 重新启动一个应用,在它被启动后,先点击“拨打电话”按钮,之后再点击“返回”按钮,这时Activity的执行顺序是:onPause() -> onStop() -> onRestart() -> onStart() -> onResume()。
A、①②③⑥ B、①④⑤⑥ C、②③④⑤ D、①③④⑥
5. 对于Activity的四种基本状态描述不正确的是( C )。
A、运行态(Running):Activity处于屏幕最前端,被用户可见且获得焦点,此时可以与用户交互。
B、暂停态(Paused):Activity被置于后台但仍然被用户可见,此时它失去了焦点,所以不可与用户进行交互,但是其状态信息会被系统保留。
C、停止态(Stopped):Activity被新的Activity覆盖,此时该Activity虽然失去焦点,但是被用户可见,而且其状态信息会被系统保留。
D、终止态(Destroyed):Activity被系统终止,资源被回收。
6. 下列关于启动Activity描述不正确的是( C )。
A、直接启动Activity需要先声明一个Intent对象用来指定启动源和启动目标。
B、当直接启动Activity并声明了一个Intent对象后,根据需要在其中可以封装一些数据,然后使用startActivity(Intent)方法将这个Intent对象传入。
C、带返回值启动Activity的这种方式是使用startActivityForResult(Intent intent, int requestCode)方法来实现的,并在原Activity中重写onActivityRequest(int requestCode, int resultCode, Intent data) 方法来获取到返回值。
D、带返回值启动Activity的这种方式在获取到返回值后,它通过requestCode和resultCode两个参数匹配到相应的Activity,然后就可以通过data参数处理返回信息了。
7. 下列关于关闭Activity的操作中,finish()方法的使用描述错误的是( D )。
A、该方法是由开发者在代码中调用的。
B、该方法在Activity执行完成所有任务且要被关闭时调用。
C、该方法一旦被调用,调用这个方法的Activity会自动执行其生命周期中的终止Activity的过程。
D、在实际开发中,我们可以把所有的清理资源的操作放在onStop()方法中,并在需要时调用finish(),来间接地调用onStop(),以关闭Activity。
8. 下列关于关闭Activity的操作中,finishActivity(int requestCode)方法的使用描述不正确的是( B )。
A、能被该方法关闭的Activity可以有多个。
B、该方法可以用来关闭自身Activity,也可以通过requestCode参数来关闭其他的Activity。
C、该方法就是通过匹配requestCode和这个请求码来关闭相应的Activity,当有多个Activity匹配时,会将这些Activity全部关闭。
D、能被该方法关闭的Activity都必须是由调用该方法的Activity所启动,且是使用startActivityForResult()启动的,也就是带返回值的方式。
9. 下列关于作业和保留栈说法不正确的是( A )。
A、Activity被启动且显示给用户,它被压入栈中成为栈顶元素,此时它处于暂停态。
B、在Android系统中,使用作业与保留栈(Tasks and Back Stack)对Activity进行管理。
C、作业(Task)是一个由当执行某一个共同任务时与用户产生交互的多个Activity组成的集合。
D、在Android系统中,将两个不同应用程序的Activity放入同一个作业来保持无缝的用户体验;对每一个作业,都会使用一个保留栈来存放完成这个作业所需要的Activity。
10. 下列关于Activity不可见和透明的描述错误的是( B )。
A、设置Activity为不可见,只需在onCreate()方法中调用setVisible(false)即可。
B、对于4.0及以上的版本,设置为不可见后,Activity不会显示其界面上的任何内容,但是其上的控件将不能响应用户事件。
C、被设置为透明的Activity,其上的控件会被显示,还能响应用户操作,只是它的背景看起来变为透明了,显示的它的下层Activity的界面。
D、将Activity设置为透明的方式是,只需在AndroidManifest.xml文件的<Activity>标签中,将Activity的theme属性设置为“android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"”即可。
11. 下列关于横竖屏显示表达不对的是( A )。
A、在Android中至多只能禁用两个Activity的屏幕旋转功能。
B、智能手机都具有屏幕旋转的功能,其上的界面会自适应屏幕的横竖旋转。
C、设置横竖屏,可以在AndroidManifest.xml文件中相应的<Activity>标签中加入android:screenOrientation=""属性,值为“portrait”是竖屏,为“landscape”是横屏。
D、设置横竖屏,可以在onCreate()方法中调用setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)将Activity置为横屏;同样地,使用setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)即可将Activity置为竖屏。
12. 下列关于Intent激活各个组件的说法错误的是( C )。
A、Activity、Service和Broadcast Receiver组件都可以被Intent消息激活。
B、Intent本身还可以以键值对的形式封装数据,这些数据可以随着组件的相互触发而被传递到目标组件,目标组件可以接收并处理这些数据。
C、与Activity的启动类似,Service也有两种激活方式,分别是开启服务—Context.startService()和绑定服务—Context.bindService();但是,绑定服务—Context.bindService()跟Intent无关。 在开启Service的方式中,被启动的Service不会随开启它的组件的关闭而停止。
D、定义好Intent对象后,可以将它传递给三种广播发送方式中的一种,它们分别是Context.sendBroadcast()、Context.sendOrderedBroadcast()和 Context.sendStickyBroadcast()。
13. 下列关于Intent及其组件名属性描述不正确的是( D )。
A、一个Intent对象包括六个属性:组件名(Component Name)、动作(Action)、数据(Data)、分类(Category)、额外信息(Extra)和标志(Flags)。
B、额外信息(Extra)的数据类型是键值对形式,键都是String,值可为多种类型和Bundle。
C、组件名用来处理Intent的匹配问题,它可以被设置,也可以不被设置;设置了组件名的Intent叫做显式Intent,不设置组件名的Intent叫做隐式Intent。
D、当一个Intent是隐式Intent时,它可以使用Action、Data和Category进行匹配,所以Category也可以用来过滤Intent;在Intent对象中,只可以放置一个Category。
14. 下列设置组件名的几种方法中不正确的一项是( D )。
A、直接在Intent的定义中指定组件名。
B、使用setComponent()方法。
C、使用setClassName()方法。
D、使用setClassTag()方法。
15. 下面关于Intent对象的属性描述不对的选项是( B )。
① 组件名(Component Name)的数据类型是ComponentName,获取方法是getComponent()。
② 动作(Action)的数据类型是String,获取方法是getAction()。
③ 数据(Data)的数据类型是Uri,获取方法是getData()、getType()和getDataAndType()。
④ 分类(Category)的数据类型是String,获取方法是getCategories()。
⑤ 额外信息(Extra)的数据类型是键值对形式和Bundle,获取方法是getExtra()和getExtras()。
⑥ 标志(Flags)的数据类型是String,获取方法是getFlags()。
A、①③⑤ B、①②④ C、②③④ D、④⑤⑥
16. 下列关于Android中Data(数据)及内置Intent的使用描述错误的是( A )。
A、在Intent中的setDataAndType()方法里,既可以一次性设置Data属性的URI和Type,也可以一次性使用setData()和setType()去设置。
B、Data通常都是与Action组合使用的,Data表示一个动作所操作的数据,而Action则表示这个动作是什么。
C、Data属性包括两部分,URI(通用资源标识符)和Type(MIME类型)。
D、Data属性常与Acting属性配套使用,比如打电话事件等。
17. 下列关于Android中动作(Action)的描述不正确的是( C )。
A、动作(Action)用于描述Intent将要完成什么动作;开发者通常可以自定义动作(Action)用在广播中,表示一个动作发生了。
B、Android系统为了编程方便还提供了一套内置的动作(Action)。
C、Action的常量ACTION_CALL的目标组件是Broadcast Receiver,动作是直接拨打Data属性指定的电话号码。
D、自定义的动作(Action)可以用在同一个应用内部,这时在使用时只需要说明其名称即可;同时也可以用在不同的应用之间,这时需要说明其完整的应用程序名称(在Android里就是主包名)加Action名称。
18. 下列关于Android中Extra(额外信息)及Intent数据传递的描述有误的一项是( C )。
A、Intent使用直接或间接的键值对形式封装数据。
B、Intent中传递数据的功能就是通过Extra这个属性实现的。
C、Intent在传递数据时,发起方要先封装好数据,然后接收方根据数据封装格式接收并处理数据;接收方使用getExtras()方法,并在其中传入一个String类型的参数,该参数就是发起方定义好的“键”,通过它就可以接收到数据。
D、直接的键值对形式即指发起方直接使用Intent对象的putExtra()方法;间接的的键值对形式(使用Bundle数据包)即指发起方也可以先把这些数据封装在一个叫做Bundle的数据包中,然后再把这个Bundle对象装进Intent中,进行数据传递。
19. 下列关于Intent的匹配法则描述不对的一项是( D )。
① Intent Filter通过Intent的Action、Category和Data三个属性进行匹配,开发者不可以随意地组合它们。
② 只有Action、Category和Data这三个属性的匹配都通过才能接收到这个Intent,如果没有定义某个属性的过滤器,则认为已经通过该属性的匹配。
③ 如果Action、Category和Data这三个属性的过滤器都没有被设置,也可以接收到任意隐式Intent。
④ 每种属性内部又能拥有多个匹配项,而这里与属性级的过滤法则不同,匹配项越多表示越容易匹配到这个Intent。
⑤ Android中Intent的匹配法则:属性级(Action、Category和Data)的匹配是“或”的运算,任有一个属性匹配不到,则无法接收到这个Intent。
⑥ 如果只声明了一个属性的过滤器,其中有多个匹配子项,则只要能匹配到任何一个子项,则可以接收到这个Intent。
⑦ Android中Intent的匹配法则:一个属性内部的匹配则是“且”的运算,只要有一个子项能匹配到,则认为可以匹配到这个属性。
⑧ 如果声明了一个属性的过滤器,但在其中没有设置任何匹配子项,则会阻塞所有的过滤器,该组件将不会接收到任何隐式Intent。
A、①③④⑥⑧ B、②④⑤⑦⑧ C、③④⑤⑦ D、②④⑥⑧
20. 下列关于使用Intent Filter描述有误的一项是( B )。
A、Intent Filter有两种使用方式。
B、不可以在代码中使用IntentFilter对象。
C、允许在配置文件AndroidManifest.xml中的相应组件的标签中加入<intent-filter>标签,在其中进行设置。
D、Intent Filter的几种方式都可以使用系统内置或自定义的属性值,开发者可以使用Action、Category和Data三个属性的设置和获取方法完成匹配。
二、 简答题:(共5题,每题8分)
1. 请举例写出一个Activity的简单使用,并注明主要代码的作用。
2. 请详细请描述一下在Activity的生命周期中各个方法的调用顺序。
3. 请结合文字和代码来详细描述Activity的两种启动方式。
4. 请写出通过点击入口类中的一个按钮,然后打开百度主页的代码(请用Intent的Action属性和Data属性)。
5. 请写出一个用Intent的Extra属性来进行数据传递(不少于两种数据类型的数据传递)的详细代码。
答案:
一、选择题:
1~5:CABDC 6~10:CDBAB 11~15:ACDDB 16~20:ACCDB
二、简答题:
1. 答:
public class SimpleActActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
/* 调用父类的onCreate()方法 */
super.onCreate(savedInstanceState);
/* 指定这个Activity的界面配置文件,这里是act_simple_act.xml */
setContentView(R.layout.act_simple_act);
}
}
2. 答:① 初次启动一个Activity时的执行过程是:依次执行了onCreate() 、onStart() 和onResume()方法。② 当Activity启动后,点击“返回”按钮,这时Activity的执行顺序是:onPause() -> onStop() -> onDestroy()。③ 启动一个Activity时的执行过程是:依次执行了onCreate() 、onStart() 和onResume()方法。④ 在Activity被启动之后,点击Home按钮,这时Activity的执行顺序是:onPause() -> onStop()。⑤ 点击Home按钮后,系统回到桌面,然后我们再找到这个应用并打开,这时Activity的执行顺序是:onRestart() -> onStart() -> onResume()。⑥ 重新启动一个应用,在它被启动后,先点击“拨打电话”按钮,之后再点击“返回”按钮,这时Activity的执行顺序是:onPause() -> onStop() -> onRestart() -> onStart() -> onResume()。
3. 答:①直接启动:首先声明一个Intent对象用来指定启动源和启动目标,接着如果需要则在其中封装一些数据,然后使用startActivity(Intent)方法将这个Intent对象传入,即可完成Activity的启动。关键代码段如下:
Intent intent = new Intent(this, NewActivity.class);
this.startActivity(intent);
如果想启动多个Activity,则使用startActivities(Intent[])即可。
② 带返回值的启动:这种方式使用startActivityForResult(Intent intent, int requestCode)方法来实现,并在原Activity中重写onActivityResult(int requestCode, int resultCode, Intent data) 方法来获取到返回值,之后通过requestCode和resultCode两个参数匹配到相应的Activity,然后就可以通过data参数处理返回信息了。
4. 答:
public class MainActivity extends Activity {
Button btnOK;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnOK = (Button) findViewById(R.id.btnOK);
btnOK.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_VIEW,
Uri.parse(""));
startActivity(intent);
}
});
}
}
xml的activity_main:
<RelativeLayout xmlns:android="
xmlns:tools="
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:padding="@dimen/padding_medium"
android:text="@string/hello_world"
tools:context=".MainActivity" />
<Button
android:id="@+id/btnOK"
android:text="Intent的Action属性和Data属性测试"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
</RelativeLayout>
5. 答:
MainActivity入口类
public class MainActivity extends Activity {
Button btnOK;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnOK = (Button) findViewById(R.id.btnOK);
btnOK.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this,
ExtraActivity.class);
intent.putExtra("Id", 86);
intent.putExtra("Name", "张三");
intent.putExtra("Post", "项目经理");
startActivity(intent);
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}
xml:activity_main
<LinearLayout xmlns:android="
xmlns:tools="
android:layout_width="match_parent"
android:layout_height="match_parent" >
<Button
android:id="@+id/btnOK"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Intent的Extra属性与数据传递测试" />
</LinearLayout>
ExtraActivity接收数据类
public class ExtraActivity extends Activity {
TextView tvID, tvName, tvPost;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_extra);
tvID = (TextView) findViewById(R.id.tvID);
tvName = (TextView) findViewById(R.id.tvName);
tvPost = (TextView) findViewById(R.id.tvPost);
Intent intent = getIntent(); /* 拿到Intent对象,开始解析数据 */
int id = intent.getIntExtra("Id", 0); /* 0为默认值,如果没有Id这个Key,就得到默认值 */
String name = intent.getStringExtra("Name"); /* String类型的数据无默认值 */
String post = intent.getStringExtra("Post");
System.out.println(id);
System.out.println(name);
System.out.println(post);
tvID.setText("ID:" + id);
tvName.setText("Name:" + name);
tvPost.setText("Post:"+post);
}
}
xml:activity_extra
<LinearLayout xmlns:android="
xmlns:tools="
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/tvID"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/tvName"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/tvPost"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
还需在AndroidManifest.xml里添加ExtraActivity类的声明:
<activity
android:name=".ExtraActivity"
android:label="@string/title_activity_main" >
</activity>
收集于网络,如有侵权请联系管理员删除
展开阅读全文