Android面试宝典
- 格式:docx
- 大小:214.43 KB
- 文档页数:75
2011 Android面试宝典
1. Intent的几种有关Activity启动的方式有哪些,你了解每个含
义吗?
FLAG_ACTIVITY_SINGLE_TOP如果目标Activity已经运行在栈顶,将不会再启动
= singleTop
FLAG_ACTIVITY_BROUGHT_TO_FRONT 、=singleTask
FLAG_ACTIVITY_MULTIPLE_TASK=singleInstance
FLAG_ACTIVITY_CLEAR_TOP、如果被启动的activity已经运行在当前 task,将不会再
创建新的活动实例,位于其上的其它activity将会被关闭。
2. Activity和Task的启动模式有哪些? 每种含义是什么?
3. 通过Intent传递一些二进制数据的方法有哪些?
1). 使用Serializable接口实现序列化,这是Java常用的方法。
2). 实现Parcelable接口,这里Android的部分类比如Bitmap类就已经实现了,同
时Parcelable在Android AIDL中交换数据也很常见的。
4. 能说下Android应用的入口点吗?
真正的Android入口点是application的main,你可以看下androidmanifest.xml的
包含关系就清楚了。
5. Android都有哪些XML解析器,都熟练掌握吗?
这里SAX和DOM、XmlPull相信做过Web开发的都已经滚瓜烂熟了。
6. SQLite支持事务吗? 添加删除如何提高性能?
SQLite作为轻量级的数据库,比MySQL还小,但支持SQL语句查询,提高性能可以考
虑通过优化的SQL查询语句方式处理。SQLITE默认就是打开事务的。
7. Android Service和Binder、AIDL你都熟练吗?
Binder是Android系统进程间通信(IPC)方式之一。Binder使用Client-Server通信方式:一
个进程作为Server提供诸如视频/音频解码,视频捕获,地址本查询,网络连接等服务;多
个进程作为Client向Server发起服务请求,获得所需要的服务。要想实现Client-Server通信
据必须实现以下两点:一是server 必须有确定的访问接入点或者说地址来接受Client的请
求,并且Client可以通过某种途径获知Server的地址;二是制定Command- Reply协议来传
输数据。例如在网络通信中Server的访问接入点就是Server主机的IP地址+端口号,传输协
议为TCP协议。对Binder而言,Binder可以看成Server提供的实现某个特定服务的访问接
入点, Client通过这个‘地址’向Server发送请求来使用该服务;对Client而言,Binder
可以看成是通向Server的管道入口,要想和某个 Server通信首先必须建立这个管道并获得
管道入口。Binder框架定义了四个角色:Server,Client,ServiceManager(以后简称SMgr)
以及驱动。其中 Server,Client,SMgr运行于用户空间,驱动运行于内核空间。由于Android
的Java层级只是一个外壳框架而已,大部分的系统组件(Android本身)都是在Nataive层(又
称C/C++层)执行。这是Android的整体架构,所以我们的应用程序也必须考虑分为两层的
必要性,才能完全的融入Android的整体架构里。我们看到的Android应用架构(Application
Framework)其实只是Android整体架构里的外壳结构而已。Android应用框架就如同椅子的
椅面,那么椅子的椅腿在哪里呢?Binder系统是在Native层的C/C++组件。Java应用程序
(如Activity体系等)是透过JNI界面去呼叫Binder系统(或称为组件)。
AIDL:
在Android中, 每个应用程序都可以有自己的进程. 在写UI应用的时候, 经常要用
到Service. 在不同的进程中, 怎样传递对象呢? 显然, Java中不允许跨进程内存共享. 因
此传递对象, 只能把对象拆分成操作系统能理解的简单形式, 以达到跨界对象访问的目的.
在J2EE中,采用RMI的方式, 可以通过序列化传递对象. 在Android中, 则采用AIDL的方
式. 理论上AIDL可以传递Bundle,实际上做起来却比较麻烦.
AIDL(AndRoid接口描述语言)是一种借口描述语言; 编译器可以通过aidl文件生成一段代码,
通过预先定义的接口达到两个进程内部通信进程的目的. 如果需要在一个Activity中, 访问
另一个Service中的某个对象, 需要先将对象转化成AIDL可识别的参数(可能是多个参数),
然后使用AIDL来传递这些参数, 在消息的接收端, 使用这些参数组装成自己需要的对象.
AIDL的IPC的机制和COM或CORBA类似, 是基于接口的,但它是轻量级的。它使用代
理类在客户端和实现层间传递值. 如果要使用AIDL, 需要完成2件事情: 1. 引入AIDL的相
关类.; 2. 调用aidl产生的class.
8. 你用过哪款Android手机,有哪些优点和不足,相对于iPhone
或Symbian又有哪些优缺点?
9. 请描述下Activity的生命周期。
创建 oncreate - 启动onstart – 恢复 onResume – 暂停 onPause – 结束 onStop –
重启 onRestart 销毁onDestroy
10. 如果后台的Activity由于某原因被系统回收了,如何在被
系统回收之前保存当前状态?
onSaveInstanceState
当你的程序中某一个Activity A 在运行时中,主动或被动地运行另一个新的Activity B
这个时候A会执行
Java代码
1. public
2. void onSaveInstanceState(Bundle outState) {
3. super.onSaveInstanceState(outState);
4. outState.putLong("id", 1234567890);
5. }
11. 如何将一个Activity设置成窗口的样式。
设置Theme。
Theme.NoTitleBar
Theme.NoTitleBar.Fullscreen
android:theme="@android:style/Theme.NoTitleBar">
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
讲点轻松的吧,可能有人希望做出来的应用程序是一个漂浮在手机主界面的东西,那么
很 简单你只需要设置一下Activity的主题就可以了在AndroidManifest.xml 中定
义 Activity的地方一句话:
Xml代码
android:theme="@android:style/Theme.Dialog"
android:theme="@android:style/Theme.Dialog"
这就使你的应用程序变成对话框的形式弹出来了,或者 Xml代码
android:theme="@android:style/Theme.Translucent"
android:theme="@android:style/Theme.Translucent"
就 变成半透明的,[友情提示-.-]类似的这种activity的属性可以在
android.R.styleable 类的AndroidManifestActivity 方法中看到,
AndroidManifest.xml中所有元素的属性的介绍都可以参考这个类android.R.styleable
上面说的是属性名称,具体有什么值是在android.R.style中
可以看到,比如这个"@android:style/Theme.Dialog"就对应于
android.R.style.Theme_Dialog ,('_'换成'.' <--注意:这个是文章内容不是笑脸)就可
以用在描述文件
中了,找找类定义和描述文件中的对应关系就都明白了。
12. 如何退出Activity?如何安全退出已调用多个Activity的
Application?
使用单例模式创建一个Activity管理对象,该对象中有一个Activity容器(具体实现自己处理,使用LinkedList
等)专门负责存储新开启的每一个Activity,并且容易理解、易于操作,非常不错!在每一个Activity中的
onCreate方法里添加该Activity到MyApplication对象实例容器中。
13. 请介绍下Android中常用的五种布局。
线性布局LinearLayout,
相对布局 RelativeLayout
表单布局 TableLayout,
绝对布局AbsLayout(已淘汰)
帧布局FrameLayout
14. 请介绍下Android的数据存储方式。
数据库SQlite、Preference,文件,网络存储
15. 请介绍下ContentProvider是如何实现数据共享的。
1.继承至ContentProvider,实现其下的
onCreate,getType,insert,update,delete,query几个方法
2.发布URI,之后就可以在其他应用程序组件里通过ContentResolver来存取Content
Provider
3.android系统负责初始化所有的Content provider,不需要用户自己去创建。
* 实际上,content provider的用户都不可能直接访问到content provider实例,只
能通过ContentResolver在中间代理。
* 如调用ContentResolver.insert(),传入uri,用调用指定的content provider的
insert()。
* 数据模型Content provider展示数据类似一个单个数据库表。
*