天津理工大学移动终端开发技术(安卓)期末考试复习题 下载本文

双向调用如何实现? 远程服务如何实现? 简答题 1、可见进程

可见进程指部分程序界面能够被用户看见,却不在前台与用户交互,不响应界面事件的进程。 2、简述R.java和AndroidManifest.xml文件的用途

R.java文件是ADT自动生成的文件,包含对drawable、layout和values目录内的资源的引用指针,Android程序能够直接通过R类引用目录中的资源。R.java文件不能手工修改。

AndroidManifest.xml是XML格式的Android程序声明文件,包含了Android系统运行Android程序前所必须掌握的重要信息,这些信息包含应用程序名称、图标、包名称、模块组成、授权和SDK最低版本等,而且每个Android程序必须在根目录下包含一个AndroidManifest.xml文件。 3、简述Android系统的4种基本组件Activity、service、Content Provider的用途 Activity(活动):应用程序表示层,应用程序中的每一个屏幕都是Activity类的扩展。 Service(服务):应用程序不可见的工作者,在后台运行。

ContentProvider(内容提供器):可共享的数据存储器,提供可共享的数据库功能。私有数据一般不采用ContentProvider,而是使用文件,或者SQLite中的数据库。

BroadcastReceiver(广播接收器):意图广播的使用者。通过创建和注册广播接收器,应用程序可以监听到那些匹配特定的过滤标准的意图广播。

4、简述Activity生命周期的四种状态,以及状态之间的变换关系。 Activity表现为四种 活动状态:Activity完全能被用户看到,能 暂停状态:ActivityActivity不再处于用户界用户进行交互。 停止状态:Activity

看到,也就是说这个Activity被其他Activity全部遮挡。

非活动状态:不在以上三种状态中的Activity则处于非活动状态(被用户关闭或系统终止)。 转换关系:

5、简述Activity事件回调函数的作用和调用顺序。

在界面上完全不能被用户状态:

在用户界面中处于最上层,够与用户进行交互。 在界面上被部分遮挡,该面的最上层,且不能够与

onCreate():Activity启动后第一个被调用的函数,常用来进行Activity的初始化,例如创建View、绑

定数据或恢复信息等。

onStart():当Activity显示在屏幕上时,该函数被调用。

onRestart():当Activity从停止状态进入活动状态前,调用该函数。

onPause():当Activity进入暂停状态时,该函数被调用。一般用来保存持久的数据或释放占用的资源。 onStop():当Activity进入停止状态时,该函数被调用。

onDestroy():在Activity被终止前,即进入非活动状态前,该函数被调用。

onSaveInstanceState():Android系统因资源不足终止Activity前调用该函数,用以保存Activity的状态信息,供onRestoreInstanceState()或onCreate()恢复之用。

onRestoreInstanceState():恢复onSaveInstanceState()保存的Activity状态信息,在onStart()和onResume ()之间被调用。

6、简述5种界面布局的特点

线性布局:在线性布局中,所有的子元素都按照垂直或水平的顺序在界面上排列,如果垂直排列,则每行仅包含一个界面元素,如果水平排列,则每列仅包含一个界面元素。

框架布局:最简单的界面布局,是用来存放一个元素的空白空间,且子元素的位置是不能够指定的,只能够放置在空白空间的左上角,如果有多个子元素,后放置的子元素将遮挡先放置的子元素。 网格布局:将屏幕划分网格,通过指定行和列可以将界面元素添加的网格中网格的边界对用户是不可见的表格布局还支持嵌套,可以将另一个表格布局放置在前一个表格布局的网格中,也可以在表格布局中添加其他界面布局,例如线性布局、相对布局等等

相对布局:相对布局(RelativeLayout)是一种非常灵活的布局方式,能够通过指定界面元素与其他元素的相对位置关系,确定界面中所有元素的布局位置,能够最大程度保证在各种屏幕类型的手机上正确显示界面布局。

绝对布局:绝对布局(AbsoluteLayout)能通过指定界面元素的坐标位置,来确定用户界面的整体布局。 7、简述Android系统支持三种菜单

选项菜单(Menu类),包括图标菜单、扩展菜单;子菜单(SubMenu类);快捷菜单(ContextMenu类)。

8、简述Intent的定义和用途

Intent是一种组件之间消息传递机制,是一个动作的完整描述,包含了动作的产生组件、接收组件和传递的数据信息。

Intent的用途:启动Activity和Service;在Android系统上发布广播消息。 9、启动Activity方式

显式启动,程序必须在Intent中指明启动的Activity所在的类。

隐式启动, Android系统根据Intent的动作和数据来决定启动哪一个Activity,也就是说在隐式启动时,Intent中只包含需要执行的动作和所包含的数据,而无需指明具体启动哪一个Activity,选择权由Android系统和最终用户来决定。

10、简述Intent过滤器的定义和功能

定义:Intent过滤器是一种根据Intent中的动作(Action)、类别(Categorie)和数据(Data)等内容,对适合接收该Intent的组件进行匹配和筛选的机制。

功能:Intent过滤器可以匹配数据类型、路径和协议,还包括可以用来确定多个匹配项顺序的优先级(Priority);应用程序的Activity组件、Service组件和BroadcastReceiver都可以注册Intent过滤器,则这些

组件在特定的数据格式上就可以产生相应的动作。 11、Intent解析的匹配规则

没有指定“动作”的Intent过滤器可以匹配任何的Intent,但是没有指定“类别”的Intent过滤器只能匹配没有“类别”的Intent,把Intent“数据”Uri的每个子部与Intent过滤器的标签中的属性进行匹配,如果标签指定了协议、主机名、路径名或MIME类型,那么这些属性都要与Intent的Uri数据部分进行匹配,任何不匹配的Intent过滤器均被过滤掉。 12、简述Service的基本原理和用途

定义:Service是Android系统的后台服务组件,适用于开发无界面、长时间运行的应用功能。 用途:用于进程间通信(Inter Process Communication,IPC),解决两个不同Android应用程序进程之间的调用和通讯问题。

特点:没有用户界面;比处于非活动状态的Activity 优先级高,不会轻易被Android系统终止。即使Service被系统终止,在系统资源恢复后Service也将自动恢复运行状态。 13、实现远程服务的步骤

接口定义:使用AIDL语言定义跨进程服务的接口。

接口实现:根据AIDL语言定义的接口,在具体的Service类中实现接口中定义的方法和属性。 接口使用:在需要调用跨进程服务的组件中,通过相同的AIDL接口文件,调用跨进程服务。 14、简述在嵌入式系统中使用SQLite数据库的优势

SQLite是一个开源的嵌入式关系数据库,在2000年由D. Richard Hipp发布,其优势(特点)有:更加适用于嵌入式系统,嵌入到使用它的应用程序中;占用资源非常少,运行高效可靠,可移植性好;提供了零配置(zero-configuration)运行模式。 15、Android系统支持四种文件操作模式

MODE_PRIVATE(私有模式)缺省模式,文件仅能够被文件创建程序访问,或具有相同UID的程序访问。

MODE_APPEND,追加模式,如果文件已经存在,则在文件的结尾处添加新数据。 MODE_WORLD_READABLE全局读模式。

MODE_WORLD_WRITEABLE全局写模式,允许任何程序写入私有文件。 16、简述Android NDK开发的优势和不足。

优势:解决了核心模块使用托管语言开发执行效率低下的问题;允许程序开发人员直接使用C/C++源代码,极大的提高了Android应用程序开发的灵活性。

不足:增加程序的使用非托管代码复杂性,增加了程序调试的难度;CPU运算量大和内存消耗较少的部分运行效率最高, (例如信号处理或物理仿真)因此并不是所有的核心部分都适合使用C/C++语言编写。

程序填空题: Activity 显式启动

Intent intent = new Intent(IntentDemo.this, ActivityToStart.class); startActivity(intent); 隐式启动

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(\

startActi vity(intent); 显式获取返回值

int SUBACTIVITY1 = 1;

Intent intent = new Intent(this, SubActivity1.class); startActivityForResult(intent, SUBACTIVIT Y1); 隐式获取返回值

int SUBACTIVITY2 = 2;

Uri uri = Uri.parse(\ Intent intent = new Intent(Intent.ACTION_PICK, uri); startActivityForResult(intent, SUBACTIVITY2); 在父Activity中处理子Activity 的返回值

public void onActivityResult(int requestCode, int resultCode, Intent data){

Super.onActivityResult(requestCode, resultCode, data); switch(requestCode){

case SUBACTIVITY1:

if (resultCode == Activity.RESULT_OK){

Uri uriData = data.getData();

}else if (resultCode == Activity.RE SULT_CANCEL){ } break;

case SUBACTIVITY2:

if (resultCode == Activity.RESULT_OK){

Uri uriData = data.getData (); } break;} }

Broadcast Receiver 广播消息 发送消息

String UNIQUE_STRING = \ Intent intent = new Intent(UNI QUE_STRING); intent.putExtra(\ intent.putExtra(\ sendBroad cast(intent); 接收消息

public void onReceive(Context context, Intent intent) { String msg = intent.getStringExtra(\

Toast.makeText(context, msg, Toast.LENGTH_SHORT).show(); } Service 显式启动

Intent serviceIntent = new Intent(this, RandomService.class); startService(serviceIntent); 隐式启动