Contents
第 1 章 Android 概述
- Android 系统内核基于什么操作系统?
答:Android 是一个完整的移动操作系统,利用 Linux 作为系统内核。
实现了存储管理、设备管理、文件管理、进程管理、安全管理等操作系统的基本功能。 -
Google 发布的基于 Linux 平台的开放源代码移动操作系统平台名称是什么?
答:Android。 -
Android 运行的虚拟机名称是什么?虚拟机内运行的字节码文件后缀名是什么?
答:Android 运行的虚拟机不是 Java 虚拟机,而是经过改造的 Dalvik 虚拟机,
在虚拟机内运行的并不是 Java 编译后的字节码,而是后缀名为 dex 内部格式文件。 -
Android 采用什么软件架构?整个系统包括哪几个层次?
答:Android 采用堆栈式软件架构,整个系统从底层操作系统到顶层核心应用在内分为 5 个层次:
Linux 内核、Android 运行环境(Android Runtime)、库集合(Libraries)、应用框架(Application Framework)、应用(Application)。 -
请列举 Android 的四大常用组件,并简述其特点。
答:Activity:为应用程序提供一个活动窗口;
Service:为应用程序提供后台运行服务;
BroadcastReceiver:为应用程序提供广播消息处理机制;
ContentProvider:android 中提供多应用程序数据共享。
第 2 章 Android 开发环境与开发工具
-
Android 开发组件主要包括哪三部分?
答:Android SDK、Android SDK Tools 和 Android SDK Platform-tools。 -
Android 提供的专门用于 Eclipse IDE 开发环境可以让 Android SDK 集成到 Eclipse 环境中的插件名称?答:ADT 或 Android Development Tools。
-
请根据下图中 Android 工程目录结构,回答以下问题:
(1)应用项目名称? HelloWorld
(2)简述 src、gen、res 中 drawable、layout、values 各个文件夹的功能。
src 文件夹存放项目的源代码;gen 文件夹下面有个 R.java 文件,R.java 是在建立项目时自动生成的,这个文件是只读模式的,不能更改。通过 R.java 我们可以很快地查找我们需要的资源;res 文件夹是资源目录,包含项目中的资源文件并将编译进应用程序;drawable 下存放图片文件;layout 下存放所有布局文件;values 下存放数组、颜色等资源。
(3)Android 应用项目配置清单文件名称是什么?有什么作用
答:AndroidManifest.xml 项目的总配置文件,记录应用中所使用的 Activity、Service 等组件以及访问权限的设置等信息。 -
搭建基于 Eclipse 的 Android 应用开发环境需要哪些软件及步骤?
答:
(1)安装 JDK(Java Development Kit);
(2)安装 Eclipse;
(3)安装 Android SDK;
(4)在 Eclipse 中安装 ADT(或 Android Development Tools)插件。
第 3 章 Android GUI 开发
-
什么是 Activity?主要功能是什么?
答:Activity 是一个独立的可以与用户交互的 Android 应用组件
功能:作为应用程序框架动态加载各种用户界面视图,实现底层消息传递等,它是一个功能强大的界面管理者,负责调度各种界面视图,实现 Android 应用与用户之间的交互。 -
列举四种常用的事件监听处理方法。
答:基于事件监听内部类实现事件监听处理;基于事件监听内部匿名类实现事件监听处理;Activity 本身作为事件监听器;直接绑定到标签; -
简述利用 ArrayAdapter 适配器为 Spinner 或 AutoCompleteTextView 等组件提供显示内容的操作步骤。
答:(1)通过 findViewByID 方法建立对象
(2)提供数据:数据源可以是数组、XML 文件、List集合;
(3)提供布局;
(4)建立适配器 ArrayAdapter
(5)关联适配器 -
列举至少四种常用的布局管理器
答:LinearLayout、RelativeLayout、GridLayout、TableLayout、AbsoluteLayout、FrameLayout 等。
第 4 章 Activity 组件
-
什么是 Activity?主要功能是什么?
答:Activity 是一个独立的可以与用户交互的 Android 应用组件
功能:作为应用程序框架动态加载各种用户界面视图,实现底层消息传递等,它是一个功能强大的界面管理者,负责调度各种界面视图,实现 Android 应用与用户之间的交互。 -
Activity 生命周期包括哪些方法?
答:从 Activity 创建到停止,需经历 OnCreate()、onStart()、OnPause()、onStop()、onDestroy()等。 -
启动一个 Android 系统提供的“浏览网页”Activity 的源代码。
答:
写法 1:
Uri uri = Uri.parse(“http://www.baidu.com”);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
写法 2:
Intent intent=new Intent(Intent.ACTION_VIEW,Uri.parse(“http://www.baidu.com”));
startActivity(intent);
写法 3:
intent=new Intent();
intent.setAction(Intent.ACTION_VIEW);
uri=Uri.parse(“http://www.baidu.com”);
intent.setData(uri);
startActivity(intent); -
启动同一应用程序中的其他 Activity 的方法。
答:Intent intent=new Intent();
Intent.setClass(MainActivity.this,otherActivity.class);
startActivity(intent); -
使用 Intent 和 Bundle 在 Activity 间传递数据的过程。
答:“宿主 Activity“端的流程
1)首先创建一个 Intent 和 Bundle 对象,其中 Bundle 用于存储传递的数据;
2)然后使用 Bundle 的 putXXX 方法输入要传递的数据;
3)将要传递的数据压入 Intent 中 intent.putExtras(Bundle 对象);
4)启动“随从 Activity“。
“随从 Activity“端的流程
1)接收“宿主 Activity“的 Intent;
2)传递获得传入的 Bundle 对象;
3)使用 Bundle 的 get 方法获取要传递的数据。
第 5 章 Android Service 组件
-
什么是 Android 的服务?其类名是什么?
答:(1)Service 是运行在应用后台的一种组件,并没有自己的用户界面,不需要与用户直接交互。
(2)Service -
Service 有哪两种基本用途?
答:(1)执行长时间运行的耗时操作,如网络下载、音乐播放、文件系统监视等。
(2)组件间的交互,将某些功能以 Service 组件形式进行封装,提供给其他应用组件调用,其他组件可以与 Service 组件不在同一个进程中 -
Android 服务有哪两种启动模式?这两种启动模式各自对应的启动方法名称是什么?
答:Service 启动模式有:
(1)启动模式,startService()方法
(2)绑定模式,bindService()方法 -
从组件生命周期的角度来看,Activity 或 Service 组件启动时第一个执行的回调方法是什么?
答:onCreate() -
启动方式和绑定方式下 Service 的生命周期分别执行什么方法?
答:启动方式:startService-onCreate-onStartCommand-stopService-onDestroy
绑定方式:bindSerrvice-onCreate-onBind-unBindService-onDestroy -
在调试有关 Service 程序时发现尽管 Java 代码没有错误,但 Servie 组件仍然没有启动,相关的程序片断如下,请你分析该 Service 组件没有启动的原因,并修改 AndroidManifest.xml 文档使 Service 能被启动。
Main 类中包含启动 Service 的代码(注意:这段代码没有错误):
public class Main extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
this.startService(new Intent(this, CountService.class));
}}
AndroidManifest.xml 文档片断(注意:下面代码存在错误):
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:name=".main"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
答:
(1)CountService 类未在 AndroidManifest.xml 中注册。
(2)在</activity>
节点下加入:
<service android:name=".CountService"></service>
第 6 章 Android 程序间的通信
- 什么是 Android 的意图?其对应的类名是什么?
答:(1)在 Android 中意图表示一个应用组件通知另一个组件去做什么事的意图。本质上来说,意图是 Android 中的一种事件处理机制。在 Android 中, Intent 是用于同一应用或不同应用的组件之间通信的消息对象,可以认为它是一种数据结构,包含对要执行的动作及相关数据的描述,一个组件发出意图(Intent),Android 根据意图(Intent)描述,找到能完成意图动作的组件,同时将意图中携带的数据交给能完成意图对象。
(2)Android 中意图对应的类名是 Intent。(注意:类名严格区分大小写) -
按创建 Intent 对象时是否明确指定接收组件名称,Intent 可分为哪两种类型?
答:
按创建 Intent 对象时是否明确指定接收组件名称,Intent 可分为 Intents 可以分成两种:
显式意图(Explicit Intent ):Intent 中指定目标组件名称(component name 字段有值)。
隐式意图(Implicit Intent):Intent 中并不指定目标组件名称 (component name 为空)。 -
请简要说明 Intent 中 6 个主要属性名称及功能。
答:
Component name:接收并处理 Intent 的组件名称
Action:用来表示一个要执行的动作( action )名称的字符串
Data:动作处理数据的 URI 和 MIME 类型
Category:一个包含何种组件有资格处理 Intent 对象的信息的字符串
Extras:用于为意图附加信息,附加的信息由键值对构成。
Flags:Flags 可以为意图设置某种标志,可以用作意图发送者签名。设置了 Flags 的意图启动一个 Activity 后,这个 Activity 可以根据意图中的 Flags 值判断意图来自哪里。 -
什么是意图过滤器?其对应的类名是什么?它在 AndroidManifest,xml 文档中的元素名称是什么?
答:
(1)意图过滤器( intent filters )是通过将 Intent 对象内容、结构与具有接受意图潜能的组件进行比对,从而找到能处理意图的组件。
(2)类名:lntentFilter (注意:类名严格区分大小写)
(3)intent-filter -
如果一个组件没有设置任何 intent filter,它能否接收显式意图?能否接接收隐式意图?那么,设置有 intent filter 的组件能否接收显式意图?。
答:
(1)如果一个组件没有任何 intent filters,它就只能接收显式意图;
(2)不能;
(3)带有 intent filters 的组件能同时接收显式和隐式意图。 -
程序填空:请根据程序注释提示,在空白下划线处补充完成程序代码。
Button secondbtnservice = (Button)findViewById(R.id.service2);
secondbtnservice.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// 创建一个名为 intent 意图对象
**\*\*\*\***\*\***\*\*\*\***\_**\*\*\*\***\*\***\*\*\*\***;
// 为该意图对象的 Action 属性字段设置名为 ACTION_VIEW 系统 Action
**\*\*\*\***\*\***\*\*\*\***\_**\*\*\*\***\*\***\*\*\*\***;
// 将该意图对象的 Data 属性字段设置为 http://www.people.com.cn
**\*\*\*\***\*\***\*\*\*\***\_**\*\*\*\***\*\***\*\*\*\***;
// 以启动模式发送该意图
**\*\*\*\***\*\***\*\*\*\***\_**\*\*\*\***\*\***\*\*\*\***;
}
});
答:
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://www.people.com.cn"));
startActivity(intent);
- 请认真阅读下面 AndroidManifest.xml 文档片断,指出是否有错,如果有错应如何修改?
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:name=".Activity_comm_1"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".Activity_comm_2">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
答:包含如下意图过滤器节点是应用启动主类,一个应用中不允许同时包含两个启动主类,应删除其中一个应用组件的标志启动主类的意图过滤器节点:
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
- 程序填空:请根据程序注释提示,在空白下划线处补充完成程序代码。
Button secondbtnservice = (Button)findViewById(R.id.service2);
secondbtnservice.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// 创建一个名为 intent 意图对象
**\*\*\*\***\*\***\*\*\*\***\_**\*\*\*\***\*\***\*\*\*\***;
// 为该意图对象的 Action 属性字段设置名为 ACTION_VIEW 系统 Action
**\*\*\*\***\*\***\*\*\*\***\_**\*\*\*\***\*\***\*\*\*\***;
// 将该意图对象的 Data 属性字段设置为 http://www.people.com.cn
**\*\*\*\***\*\***\*\*\*\***\_**\*\*\*\***\*\***\*\*\*\***;
// 以启动模式发送该意图
**\*\*\*\***\*\***\*\*\*\***\_**\*\*\*\***\*\***\*\*\*\***;
}
});
答:
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://www.people.com.cn"));
startActivity(intent);
-
Android 的 Broadcast 本质上是什么机制?发送广播消息有哪几种方法?
答:Broadcast ( 广播 ) 是一种在 Android 中广泛运用在应用程序之间异步传输信息的机制。发送广播的方法有:sendBroadcast()、sendOrderedBroadcast()和 sendStickyBroadcast( ) -
广播消息的处理流程有哪 3 个环节?
答:广播消息的处理流程包括以下 3 个环节:
(1)消息发送
(2)BroadcastReceiver 注册
(3)消息处理 -
BroadcastReceiver 对象的主要功能是什么?
答:BroadcastReceiver 用于接收并处理广播消息,不管是系统消息还是自定义消息都可以通过 BroadcastReceiver 处理。 - BroadcastReceiver 作为应用级组件必须经过注册才能处理广播消息,注册有哪两种方式?
答:
(1)静态注册:在 AndroidManifest.xml 中用标签声明,并在节点辖域中用 标签设置过滤器;
(2)动态注册:在代码中定义并设置好一个 IntentFilter 对象,然后在需要注册的地方调用 Context.registerReceiver(BroadcastReceiver, intentFilter) 方法,撤消注册时,调用 Context.unregisterReceiver(BroadcastReceiver ) 方法。动态注册的 Context 对象被销毁时, BroadcastReceiver 也随之自动注销。
第 7 章 Android 数据存储
- 为了保存永久性的应用数据,Android 主要提供了哪几种数据存储方式?
答:
(1)Shared Preferences
以 key-value 对方式保存私有的基本类型数据。
(2)文件存储
包括两种方式:在内部存储空间保存私有数据和在外部存储卡上保存公共数据。
(3)SQLite Databases
在私有的数据库中存储结构化数据。
(4)Network Connection
将数据保存在网络服务器上。
(5)Android 还提供将私有数据开放给其他应用的途径:Content Provider。 - SharedPreferences 以 key-value 对的形式存储信息,请问 key 和 value 的各是什么数据类型?
答:key 是独一无二的 String 类型名称,value 取值可以是 boolean、float、int、long 和 String 这些基本数据类型的数据。 -
SharedPreferences 保存在哪里?能否在开发环境所在的文件系统中直接查看?
答:SharedPreferences 保存在 Android 操作系统内部的文件系统中,位置为:data\data\应用程序报名\share-refs 目录下。不能直接查看内容,需通过 File Explorer 导出查看。 4.描述 SharedPreferences 保存数据的步骤。
答:(1)根据 Context 的 getSharedPreferences()方法获取 SharedPreferences 对象;
(2)利用 edit()方法获取 Editor 对象;
(3)通过 Editor 对象存储 key-value 键值对数据
(4)通过 commit()方法提交数据 -
简述 SQLiteDatabase 类功能及常用方法。
答:SQLiteDatabase 类代表一个数据库对象,它有创建、删除、添加、更新、查询及事务处理等常用的数据库操作方法。
SQLiteDatabase 对象提供了直接执行 SQL 语句的方法:execSQL(),可以将 SQL 语句作为该方法的字符串参数,调用该方法可以直接执行各种 SQL 语句,完成对数据库的各种操作。
此外,SQLiteDatabase 对各种常用的数据库操作,还提供专门方法,取代直接调用 execSQL() 方法执行 SQL 语句。常用的方法有:openDatabase()、create()、insert()、query()、replace()、delete()、deleteDatabase() 等,这些方法依据参数类型和个数不同,提供了不同的重载方法。 -
简述 SQLite Cursor 功能和常用方法。
答:SQLiteCursor 代表查询结果的记录集。SQLiteDatabase 的各种 query() 查询方法都会返回一个 Cursor 对象, Cursor 代表查询到的记录行集合, 它提供了浏览数据库查询结果机制,可以从查询结果中读取行或列数据。
常用方法有: move()、moveToFirst()、moveToLast()、moveToNext()、moveToPrevious()、getColumnCount()、getColumnIndex()、getColumnName()、getCount()、getDouble()等。 -
根据下面程序中注释提示填写所需代码。
//初始化私有的 SQLiteDatabase 类对象 mSQLiteDatabase 为 null
(1)
\***\*\*\*\*\***\*\*\*\*\***\*\*\*\*\***\_\_\_\***\*\*\*\*\***\*\*\*\*\***\*\*\*\*\***;
private static final String DATABASE_NAME = "Test.db";
private static final String CREATE_TABLE = "CREATE TABLE IF NOT EXISTS "
- TABLE_NAME + " (" + \_ID + " INTEGER PRIMARY KEY,"
- NAME + " TEXT," + AGE + " INTEGER)";
try {
//按 Activity.MODE_PRIVATE 模式打开或创建 DATABASE_NAME 指定的数据库,
//并保存到 SQLiteDatabase 类对象 mSQLiteDatabase 中
(2)\***\*\*\*\*\***\*\*\*\*\***\*\*\*\*\***\_\_\_\***\*\*\*\*\***\*\*\*\*\***\*\*\*\*\***;
//调用 mSQLiteDatabase 对象的 exeSQL()方法执行 CREATE_TABLE 指定的 SQL 语句
(3)\***\*\*\*\*\***\*\*\*\*\***\*\*\*\*\***\_\_\_\***\*\*\*\*\***\*\*\*\*\***\*\*\*\*\***;
} catch (Exception ex) {
ShowDialog("数据库操作异常:" + ex.getMessage());
}
答:
(1)private SQLiteDatabase mSQLiteDatabase = null;
(2)mSQLiteDatabase = openOrCreateDatabase(DATABASE_NAME, Activity.MODE_PRIVATE, null);
(3)mSQLiteDatabase.execSQL(CREATE_TABLE);
- 根据你的理解,Content Provider 和 Content Resolver 两者间是什么关系?
答:
(1)应用程序可以通过客户端 ContentResolver 对象访问一个 Content Provider 中数据, ContentResolver 有与 Content Provider 对象中对应名称的方法(Method),调用这些方法完成基本的 “CRUD” (Create, Retrieve, Update, and Delete) 操作。
(2)ContentResolver 对象在客户应用进程中,而 ContentProvider 对象是在数据提供者的应用中,两者配合处理进程间通讯。
(3)ContentProvider 实际上还负责将内部数据转换成对外的表格形式,ContentProvider 可以为多个不同的 ContentResolver 提供服务。
第 8 章 Android 资源与国际化
-
Android 中使用的资源包括哪些?
答:在 Android 应用程序中经常使用的资源有字符串、菜单、图像、声音、视频、颜色、布局文件、样式和主题等。 -
res/values 目录下的 strings.xml 文件中有一个标签:
张三 ,请写出在代码中和布局中设置 TextView 对象 tv 的 Text 属性的代码。
答:代码中:tv.setText(getResources().getString(R.string.username));
布局中:android:text=”@string/username” -
使用系统提供的颜色资源在代码中和布局中分别设置 TextView 的背景色。
答:在布局中:android:background=”@android:color/black”
在代码中:tv.setBackgroundColor(getResources().getColor(android.R.color.black));
简答题
-
ListView 使用的基本步骤:
(1)得到 ListView 类型的对象;
(2)生成适配器对象。并设置数据;
(3)把适配器对象设置为 ListView 的适配器;
(4)设置监听器监听事件的发生。 -
简述用 SQLiteDatabase 进行数据库操作的步骤?
(1)获取 SQLiteDatabase 对象,它代表了与数据库的连接。
(2)调用 SQLiteDatabase 的方法来执行 SQL 语句。
(3)操作 SQL 语句的执行结果。
(4)关闭 SQLiteDatabase,回收资源。 -
简述 Android 系统中运行 service 的两种方式:
(1)通过 Context 的 startService():访问者与 Service 之间没有关联,即使访问者退出,Service 也仍然运行。
(2)通过 Context 的 bindService():访问者与 Service 绑定在一起,访问者一旦退出,Service 也就终止了。
选择题
-
android 中下列属于 Intent 的作用的是(c)
A、实现应用程序间的数据共享
B、是一段长的生命周期,没有用户界面的程序,可以保持应用在后台运行,而不会因为切换页面而消失
C、可以实现界面间的切换,可以包含动作和动作数据,连接四大组件的纽带
D、处理一个应用程序整体性的工作 -
在 android 中使用 SQLiteOpenHelper 这个辅助类时,可以生成一个数据库,并可以对数据库版本进行管理的方法可以是(b)
A、setWriteableDatabase()
B、getReadableDatabase()
C、getDatabase()
D、getAbleDatabase() -
android 关于 service 生命周期的 onCreate()和 onStart()说法正确的是(d)
A、当第一次启动的时候先后调用 onStart()和 onCreate()方法
B、当第一次启动的时候只会调用 onCreate()方法
C、如果 service 已经启动,将先后调用 onCreate()和 onStart()方法
D、如果 service 已经启动,只会执行 onStart()方法,不在执行 onCreate()方法 -
Android 项目工程下面的 assets 目录的作用是什么 b
A、放置应用到的图片资源。
B、主要放置多媒体等数据文件
C、放置字符串,颜色,数组等常量数据
D、放置一些与 UI 相应的布局文件,都是 xml 文件 -
关于 res/raw 目录说法正确的是(a)
A、 这里的文件是原封不动的存储到设备上不会转换为二进制的格式
B、 这里的文件是原封不动的存储到设备上会转换为二进制的格式
C、 这里的文件最终以二进制的格式存储到指定的包中
这里的文件最终不会以二进制的格式存储到指定的包中 -
下列哪项不是 Android 四大组件 ( C )
A.Seivice B. Activity C. Handler D. Content Provider -
Android 是如何组织 Activity 的 ( B )
A.以堆的方式组织 Activity B. 以栈的方式组织 Activity
C. 以树形方式组织 Activity D. 以链式方式组织 Activity -
设置 xml 布局文件中的字体大小一般用什么单位 ( c )
A.dp B. px C. sp D. pt -
关于 BroadcastReceiver 的说法不正确的是 ( B )
A.是用来接收广播 Intent 的
B.一个广播 Intent 只能被一个订阅了此广播的 BroadcastReceiver 所接收
C.对有序广播,系统会根据接收者声明的优先级别按顺序逐个执行接收者
D.接收者声明的优先级别在的 android:priority 属性中声明,数值越大 优先级别越高 -
在手机开发中常用的数据库是( A )
A,sqlLite B,Oracle C,Sql Server D,Db2 -
使用 MediaPlayer 播放保存在 sdcard 上的 mp3 文件时(A )
A,需要使用 MediaPlayer.create 方法创建 MediaPlayer
B,直接 newMediaPlayer 即可
C,需要调用 setDataSource 方法设置文件源
D,直接调用 start 方法,无需设置文件源 -
能够自动完成输入内容的组件是(D)
A,TextView B,EditText C,ImageView
D,AutoCompleteTextView -
关于 android 中播放视频的说法不对的是(A)
A,可以使用 SurfaceView 组件播视频
B,可以使用 VideoView 组件播视频
C,VideoView 组件可以控制播放的位置和大小
D,VideoView 播放视频的格式可以是 3gp -
关于适配器的说法正确的有( B )
A.它主要是用来存储数据
B.它主要用来把数据绑定到组件上
C.它主要用来解析数据
D.它主要用来存储 xml 数据 -
在 android 中,ArrayAdapter 类是用于( A )
A.用于把数据绑定到组件上
B.它能把数据显示到 Activity 上
C.它能把数据传递给广播
D.它能把数据传递给服务 -
以下可以实现进程间数据通信的是( )
A、Intent
B、AIDL
C、Broadcast
D、Content Provider