一选择题(可多选,30分)1、关于BroadcastReceiver说法正确的是(AB)A、BroadcastReceiver有两种注册方式,静态注册和动态注册B、Broadcast分正常广播和有序广播,其中有序广播可以被停止掉,不传给下一个接受者C、Broadcast Receiver 提供了可视化的界面来显示广播信息D、BroadcastReceiver的onReceive函数里可以使用线程来执行耗时的操作2、关于Android dvm的进程和Linux的进程,应用程序的进程说法正确的是(D)A、DVM指dalivk的虚拟机.每一个Android应用程序都在它自己的进程中运行,不一定拥有一个独立的Dalvik虚拟机实例.而每一个DVM都是在Linux中的一个进程,所以说可以认为是同一个概念.B、DVM指dalivk的虚拟机.每一个Android应用程序都在它自己的进程中运行,不一定拥有一个独立的Dalvik虚拟机实例.而每一个DVM不一定都是在Linux 中的一个进程,所以说不是一个概念.C、DVM指dalivk的虚拟机.每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例.而每一个DVM不一定都是在Linux 中的一个进程,所以说不是一个概念.D、DVM指dalivk的虚拟机.每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例.而每一个DVM都是在Linux 中的一个进程,所以说可以认为是同一个概念.3 android 中下列关于Intent说法正确的是(C)A、实现应用程序间的数据共享B、是一段长的生命周期,没有用户界面的程序,可以保持应用在后台运行,而不会因为切换页面而消失C、可以实现界面间的切换,可以包含动作和动作数据,连接四大组件的纽带D、处理一个应用程序整体性的工作4 android 关于service生命周期的onCreate()和onStart()说法正确的是(AD)A、当第一次启动的时候先后调用onCreate()和onStart()方法B、当第一次启动的时候只会调用onCreate()方法C、如果service已经启动,将先后调用onCreate()和onStart()方法D、如果service已经启动,只会执行onStart()方法,不在执行onCreate()方法5.在异常处理中,如释放资源、关闭文件、关闭数据库等由( C)来完成。
A.try子句B.catch子句C.finally子句D.throw子句6.关于Collections说法正确的是(AC)A.Collections 包含有各种有关集合操作的静态多态方法B.Collections是集合类的一个顶级接口,C.Collections 是一个包装类,此类不能实例化D.List是Collections的子接口7.关于java抽象类说法正确时是(AC)A.抽象类可以有私有方法或私有变量,抽象类中的变量默认是friendly 型,其值可以在子类中重新定义,也可以重新赋值。
B.抽象类中只能有抽象方法C.抽象类中可以有具体实现的方法D.抽象类子类可以选择实现部分抽象方法8.关于接口的说法正确的是(ABC)A.接口的实现类必须实现接口的所有方法。
B.接口必须是公开的(public)的,不能由私有(private)的方法或变量;C.接口中的变量必须是public static final,且必须给其初值,实现类中不能重新定义,也不能改变其值;D.接口中可以提供部分方法的具体实现9.关于Android中SQLiteOpenHelper类说法正确是是(ABD)A.SQliteOpenHelper是一个辅助类,来管理数据库的创建和版本的管理B . SqliteOpenHelper是一个抽象类C.SqliteOpenHelper不是一个抽象类D.继承SqliteOpenHelper类,必须实现它的onCreate和onUpgrade函数10、关于ContentValues类说法正确的是(A)A、他和Hashtable比较类似,也是负责存储一些名值对,但是他存储的名值对当中的名是String类型,而值都是基本类型B、他和Hashtable比较类似,也是负责存储一些名值对,但是他存储的名值对当中的名是任意类型,而值都是基本类型C、他和Hashtable比较类似,也是负责存储一些名值对,但是他存储的名值对当中的名,可以为空,而值都是String类型D、他和Hashtable比较类似,也是负责存储一些名值对,但是他存储的名值对当中的名是String类型,而值也是String类型二填空题(每空一分27分)1、android中常用的五个布局是FrameLayout,LinearLayout,RelativeLayout ,TableLayout,Absolutelayout。
2、android 的四大组件是Activity,Service,BroadcastReceiver, 。
3、当启动一个Activity并且新的Activity执行完后需要返回到启动它的Activity来执行的回调函数是startActivityResult()。
4、AIDL的全称是Android Interface Define Language(Android接口定义语言),它的作用是定义进程通信接口5、Android中实现序列化的两种方式是实现Serializable接口实现Parcelable接口6、activity的启动模式standard、singleTop、singleTask、singleInstance7、Linux内核几种同步方法原子操作,自旋锁,信号量,互斥体8、Android系统中运行的第一个Dalvik虚拟机程序叫Zygote9、Android framework中定义的三种窗口类型是应用窗口类型子窗口类型系统窗口类型10、Android中大部分服务都在SystemServer进程中运行三简答题1.如果后台的Activity由于某原因被系统回收了,如何在被系统回收之前保存当前状态?(3分)重写onSaveInstanceState()方法,在此方法中保存需要保存的数据,该方法将会在activity 被回收之前调用,通过重写onRestoreInstanceState()方法可以从中提取保存好的数据。
2.简述Android中Looper、Hander、MessageQueue消息系统机制(7分)Android提供了Handler 和Looper 来满足线程间的通信。
Handler 先进先出原则。
Looper 类用来管理特定线程内对象之间的消息交换。
1)Looper: 一个线程可以产生一个Looper对象,由它来管理此线程里的Message Queue(消息队列)。
2)Handler: 构造Handler对象来与Looper沟通,以便push新消息到Message Queue里;或者接收Looper从Message Queue取出)所送来的消息。
3) Message Queue:用来存放线程放入的消息。
运行机制:每个线程都可以并仅可以拥有一个Looper实例和一根消息队列MessageQueue。
Android应用在启动的时候会默认会为主线程创建一个Looper实例。
而在子线程中,Looper 需要通过显式调用Looper.Prepare()方法进行创建,并通过调用Looper.loop(),让线程的消息队列开始运行,可以接收消息了。
Handler在创建的时候可以指定Looper,这样通过Handler 的sendMessage()方法发送出去的消息就会添加到指定Looper里面的MessageQueue里面去。
在不指定Looper的情况下,Handler绑定的是创建它的线程的Looper。
整个消息处理的大概流程是:1. 包装Message对象(指定Handler、回调函数和携带数据等);2. 通过Handler的sendMessage()等类似方法将Message发送出去;3. 在Handler 的处理方法里面将Message添加到Handler绑定的Looper的MessageQueue;4. Looper的loop()方法通过循环不断从MessageQueue里面提取Message进行处理,并移除处理完毕的Message;5. 通过调用Message绑定的Handler对象的dispatchMessage()方法完成对消息的处理。
3.简述Android中binder机制(5分)binder用来实现不同进程之间的通信。
binder属于一个驱动,工作在linux层面,运行在内核态,它的操作是基于一段内存。
所以我们开发的程序中对binder的使用都是通过系统的调用来完成的。
Binder架构由服务端Server,binder驱动,客户端Client三个部分构成,Server 注册服务,Server作为众多服务的拥有者,当它想向Client提供服务时,得先去Service Manager那儿注册自己的服务。
Server可以注册一个或多个服务。
Client申请服务,Client 作为服务的使用者,当它想使用服务时,得向Service Manager申请自己所需要的服务。
Client 可以申请一个或多个服务。
当Client申请服务成功后,Client就可以通过binder驱动和Server 通信。
4.简述Service启动方式及区别(7分)Service需要通过调用Context.startService()或Context.bindService()方法启动。
但是它们的使用场合有所不同。
使用startService()方法启用服务,调用者与服务之间没有关连,即使调用者退出了,服务仍然运行。
使用bindService()方法启用服务,调用者与服务绑定在了一起,调用者一旦退出,服务也就终止,大有“不求同时生,必须同时死”的特点。
用Context.startService()方法启动服务,在服务未被创建时,系统会先调用服务的onCreate()方法,接着调用onStart()方法。
如果调用startService()方法前服务已经被创建,多次调用startService()方法并不会导致多次创建服务,但会导致多次调用onStart()方法。
采用startService()方法启动的服务,只能调用Context.stopService()方法结束服务,服务结束时会调用onDestroy()方法。
用Context.bindService()方法启动服务,在服务未被创建时,系统会先调用服务的onCreate()方法,接着调用onBind()方法。