text=”字符串常量”/>)则不符合国际化做法,会导致“I18n"警告性错误——黄色的感叹号。
(2’)
5、请简述Activity组件与视图View(46、60)
答:
Activity是安卓最重要的组件,负责用户界面的设计,Activity用户界面框架采用MVC模式(modelviewcontroller)。
(1’)
控制器负责接受并响应程序的外部动作 ;通过视图来反馈应用程序给用户的信息(通常是屏幕信息反馈);模型是应用程序的核心,用于保存数据和代码。
(1’)
Android组件在清单文件中使用注册。
Activity组件通过Intent对象激活。
(1’)
Activity作为用户界面,提供了一些基本方法,如设置内容视图方法setContentView()、找控件方法findViewById()、关闭当前窗口方法finish()等。
(1’)
Activity的一些扩展方法包括,用于数据共享存储的getPreference()方法、用于动态加载页面布局的getLayoutInflater()方法,开始后台服务的startService()方法、发送广播的sendBroadcast()方法、获得程序间数据共享的内容解析器的getContentResolver()方法等。
(1’)
每个Activity除了有创建onCreat()、销毁onDestroy()两个基本方法外,还有停止onStop()、激活onStart()、暂停onPause()、恢复onResume()等方法。
(1’)
Activity在其生命周期有三种状态:
运行态、暂停态和停止态。
运行态是指Activity出现在屏幕的最上层的状态,此时用户通常可以获取焦点;暂停态是指Activity调用onPause()方法后出现的状态,其上还有处于运行态的Activity存在,并且Activity没有被完全遮住,即处于暂停态的Activity有一部分视图被用户所见;停止态是指当前Activity调用onStop()方法后出现的状态,此时它完全被处于运行态的Activity遮挡住,即用户界面完全不被用户所见。
6、请简述Service组件(46/171)(简不了啊妈妈)
答:
Service服务类组件是Android提供的无用户界面、长时间在后台运行的组件。
Android组件在清单文件中使用注册。
Service组件通过Intent对象激活。
Service有利于降低系统资源的开销,而且比Activity有更高的优先级。
Service服务的调用分为显式启动和隐式启动。
显式启动是指在创建Intent对象时,指明Service所在的类,并调用方法startService(Intent)启动Service。
隐式启动是指在注册Service的同时,内嵌标签及,标签的android:
name属性指定了引用该服务的名称。
隐式启动的好处是不需要指明需要启动哪一个Activity,而由Android系统根据Intent的动作和数据来决定,这样有利于降低Android组件之间的耦合度,强调Android组件的可复用性。
若Service与调用它的组件在同一个应用程序中,则既可以使用显式启动,也可以使用隐式启动(显式启动代码简洁);若服务和调用服务的组件在不同的应用程序中,则服务只能用隐式启动方式。
Service有startService()的非绑定启动方式和bindService()的绑定启动方式两种。
Service的两种启动方式:
1、采用start开启服务
使用Service的步骤:
(1).定义一个类继承Service
(2).在Manifest.xml文件中配置该Service
(3).使用Context的startService(Intent)方法启动该Service
(4).不再使用时,调用stopService(Intent)方法停止该服务
使用这种start方式启动的Service的生命周期如下:
onCreate()--->onStartCommand()(onStart()方法已过时)--->onDestory()
说明:
如果服务已经开启,不会重复的执行onCreate(),而是会调用onStart()和onStartCommand()。
服务停止的时候调用onDestory()。
服务只会被停止一次。
特点:
一旦服务开启跟调用者(开启者)就没有任何关系了。
开启者退出了,开启者挂了,服务还在后台长期的运行。
开启者不能调用服务里面的方法。
二、采用bind的方式开启服务
使用Service的步骤:
(1).定义一个类继承Service
(2).在Manifest.xml文件中配置该Service
(3).使用Context的bindService(Intent,ServiceConnection,int)方法启动该Service
(4).不再使用时,调用unbindService(ServiceConnection)方法停止该服务
使用这种bind方式启动的Service的生命周期如下:
onCreate()--->onBind()--->onunbind()--->onDestory()
注意:
绑定服务不会调用onstart()或者onstartcommand()方法
特点:
bind的方式开启服务,绑定服务,调用者挂了,服务也会跟着挂掉。
绑定者可以调用服务里面的方法。
服务的整个生命周期从调用onCreate()开始起,到onDestroy()返回时结束。
与Activity类似,服务也在onCreate()中完成初始设置,并在onDestroy()中释放所有剩余资源。
无论服务是通过startService()还是bindService()创建,都会为所有服务调用onCreate()和onDestroy()方法。
服务的有效生命周期从调用onStartCommand()或onBind()方法开始。
每种方法均有Intent对象,该对象分别传递到startService()或bindService()。
对于启动服务,有效生命周期与整个生命周期同时结束(即便是在onStartCommand()返回之后,服务仍然处于活动状态)。
对于绑定服务,有效生命周期在onUnbind()返回时结束。
启动服务
该服务在其他组件调用startService()时创建,然后无限期运行,且必须通过调用stopSelf()来自行停止运行。
此外,其他组件也可以通过调用stopService()来停止服务。
服务停止后,系统会将其销毁。
绑定服务
该服务在另一个组件(客户端)调用bindService()时创建。
然后,客户端通过IBinder接口与服务进行通信。
客户端可以通过调用unbindService()关闭连接。
多个客户端可以绑定到相同服务,而且当所有绑定全部取消后,系统即会销毁该服务。
(服务不必自行停止运行)
7、请简述BroadcastReceiver组件(46、191)
答:
BroadcastReceiver,即广播接收者,用来接收来自系统或其它应用程序的广播,并作出回应。
广播接收者组件没有UI界面。
(2’)
在Android应用中,广播接收者类使用标签在清单文件中注册,为静态注册方式,只能具有相应权限的广播接收者才能接收广播、获取Intent对象中的数据。
动态注册是在程序中通过使用Context类提供的方法registerReceiver()完成的。
(2’)
创建广播接收者的方法有两种,一是标准的类继承方法,二是通过向导创建广播接收者。
(1’)
BroadcastReceiver组件通过Intent对象激活。
一个BroadcastReceiver的生命周期从调用onReceiver(Context,Intent)方法开始,到该方法返回结束。
(1’)
8、请简述ContentProvider组件(46、251)
答:
ContentProvider(内容提供者)是Android系统中不同应用程序之间共享数据的接口,用于保存和检索数据。
使用ContentProvider访问某个应用程序的数据,不必关心其数据的存储方式,其他应用程序可以通过一个ContentProvider类型的对象来操作某个程序的数据。
(2’)
Android应用开发者将自己的持久化数据公开给其他应用程序有两种方法:
一是定义自己的ContentProvider子类,在清单文件里使用标签注册,并实现CRUD(增加(Create)、读取查询(Retrieve)、更新(Update)和删除(Delete));二是将当前应用程序的数据添加到已有的ContentProvider中。
(2’)
组件ContentProvider的四个CRUD方法的第一方法参数均为Uri类型。
创建ContentProvider子类时,标签中name为必填属性,表示ContentProvider子类的名称;authorities也是必填属性,表示其他应用程序访问该ContentProvider时的路径;permission是任选属性,用于对本应用提供的数据访问的限定,省略permission属性时,表示任何应用都可以访问本应用提供的数据。
(1’)
9、请简述意图对象intent(47)
答:
Intent,意图、打算,用于对某个操作的抽象描述,包括动作名称、操作数据以及附加数据的描述。
在Android中,通过Intent对象实现组件之间相互调用的相关信息。
意图类Intent在Android程序设计中起纽带作用,负责传递信息和数据。
(1’)
Android组件调用时,Intent除了封装意图名称,还封装了一些方法,主要包括构造方法、存放附加数据方法、获取数据方法和设置属性方法等。
(1’)
Intent显式调用是通过使用显式意图明确要激活的组件,其方法是通过Intent提供的方法setClass()、setClassName()或setComponent()来指定的。
(1’)
Intent隐式调用需要在清单文件中使用标签(意图过滤器)来指定动作名称。
(1’)
隐式意图就是在意图激活Activity、Service或BroadcastReceiver这三类组件时,不需要显式指出组件的名称,而是指定action及category,Android系统会根据其特征找到相应的组件并激活。
延其意图类PendingIntent一般用在Notification上,可以理解为延期执行的Intent,是对Intent的一个包装。
(1’)
10、请简述AIDL(185)
答:
AIDL(androidinterfacedefinitionlanguage)是Android自定义的接口描述语言,可以简化进程间数据格式转换和数据交换的代码,通过定义Service内部的共有方法,允许在不同进程的调用者和Service之间相互传递数据。
(2’)
AIDL允许定义函数参数的传递方向,有三种方向:
标识为in的参数将从调用者传递到远程服务中,标识为out的参数将从远程服务传递到调用者中,标识为inout的参数先从调用者传递到远程服务中,再从远程服务返回到调用者。
(2’)
使用AIDL跨进程调用(远程服务)的服务器端开发,其主要步骤如下:
(1).创建接口描述文件;
(2).建立一个服务类(service的子类)并实现接口;
(3).在Service的绑定方法onBind(Intent)里返回实现了接口的实例对象;
(4).在清单文件中注册AIDL对应的服务。
使用AIDL跨进程调用(远程服务)的客户端开发,其主要步骤如下:
(1).创建与服务器端相同的接口描述文件;
(2).在主Activity中,定义远程服务连接对象,在其内创建远程服务对象;
(3).在主Activity中使用绑定方式调用远程服务,通过远程服务对象调用远程服务里的方法。
(2’)
11、请简述SQLite数据库的特点(218)
答:
SQLite数据库适合于嵌入式系统,占用资源少、运行高效、可移植性好、并且提供了零配置的运行模式,是Android手机自带(即内置)的轻量级数据库软件,提供了对数据库的增删改查等操作。
(3’)
SQLite数据库体系结构中最核心的部分是虚拟机,也称虚拟数据库引擎(virtualdatabaseengine,VDBE),用来解释字节代码,以完成对数据库的操作。
(2’)
12、请简述Android移动开发与javaWeb开发的异同。
(P5)
答:
相似之处:
javaWeb开发中的用户界面UI与Android中的用户界面Activity是平行的;(1’)
javaWeb网站开发和Android都有UI设计;(1’)
Android开发是java开发的一个分支,Android类库用了java中的部分常用类库;(1’)
相异之处:
二者的工程文件结构有很大的差异;(1’)
就难易程度来说,Android开发比javaWeb开发要简单容易很多;(1’)
13、请简述Android系统架构(参见P14)
答:
Anndroid是基于Linux内核的软件平台和操作系统,采用了软件堆栈架构,共分为四层:
Linux内核层、Anndroid函数库及运行时层、应用程序框架层和应用程序层。
(2’)
Linux内核是硬件和其他软件堆层之间的一个抽象隔离层,提供由操作系统内核管理的底层基础功能,,主要有安全机制、内存管理、进程管理、网络协议栈和驱动程序等。
Anndroid函数库及运行时是第二层,位于Linux内核之上,也称中间件层。
Anndroid运行时由核心库和Dalvik虚拟机构成。
核心库为开发人员提供了Android系统的特有函数功能和java语言的基本函数功能,Dalvik虚拟机采用适合内存和处理器受限的专用格式。
应用程序框架层提供了Android平台的管理功能和组件的重用机制,包括Activity管理、资源管理、位置管理、通知消息管理、View系统和内容提供者等。
Android的三大核心功能如下:
(1).View:
提供了绘制图形,处理触摸、按键事件等功能;
(2).ActivicyManagerService:
简称为AMS,主要功能是管理所有应用程序的Activity、内存管理等,AMS作为一种系统级服务管理所有Activity,当操作(启动或停止)某个Activity时,必须报告给AMS,而不能“擅自处理”,在内存不足时,AMS可能主动杀死后台的Activity;
(3).WindowManagerService:
简称WMS,主要功能是为所有应用程序分配窗口并管这些窗口。
应用程序层提供了一系列核心应用程序,如打电话、浏览器、联系人、相册、地图和电子市场等。
(3’)
14、请简述Activity的生命周期(64)
Activity在其生命周期有三种状态:
运行态、暂停态和停止态。
(1’)
运行态是指Activity出现在屏幕的最上层的状态,此时用户通常可以获取焦点;(1’)
暂停态是指Activity调用onPause()方法后出现的状态,其上还有处于运行态的Activity存在,并且Activity没有被完全遮住,即处于暂停态的Activity有一部分视图被用户所见;(1’)
停止态是指当前Activity调用onStop()方法后出现的状态,此时它完全被处于运行态的Activity遮挡住,即用户界面完全不被用户所见。
(1’)
Activity的生命周期
15、请简述服务的显示启动和隐式启动(175)
Service服务的调用分为显式启动和隐式启动。
显式启动是指在创建Intent对象时,指明Service所在的类,并调用方法startService(Intent)启动Service。
(2’)
隐式启动是指在注册Service的同时,内嵌标签及,标签的android:
name属性指定了引用该服务的名称。
(2’)
隐式启动的好处是不需要指明需要启动哪一个Activity,而由Android系统根据Intent的动作和数据来决定,这样有利于降低Android组件之间的耦合度,强调Android组件的可复用性。
若Service与调用它的组件在同一个应用程序中,则既可以使用显式启动,也可以使用隐式启动(显式启动代码简洁);若服务和调用服务的组件在不同的应用程序中,则服务只能用隐式启动方式。
(1’)
程序(2程序填空2程序设计)
AlertDialogP72绑定服务方式P179广播注册P196SQLiteP223
1.消息提醒对话框AlertDialogP72
2.绑定服务方式P179