Android面试题
1,谈谈Activity的四种启动模式
答:四种启动模式分别是
Standard SingleTop SingleTask SingleInstance
Standard 是默认的启动模式,可以不用写设置。在该模式下都会默认创建一个新的实例,因此在这种模式下可以有多个相同的实例,也允许多个相同的Activity叠加。
SingleTop 可以有多个实例,但不允许多个相同的Activity叠加。如果Activity在栈顶的时候,启动相同的Activity不会创建新的实例,而会调用其onNewIntent方法
SingleTask 只有一个实例,在相同的一个应用程序启动的时候,若Activity不存在则会在当前的task创建一个新的实例,若存在。则会把task中在其之上的其它Activity destory掉并调用它的onNewIntent方法。
如果是在别的应用程序中启动它,则会新建一个task,并在该task中启动这个Activity,singleTask允许别的Activity与其在一个task中共存,也就是说,如果我在这个singleTask的实例中再打开新的Activity,这个新的Activity还是会在singleTask的实例的task中。
singleInstance 只有一个实例,并且这个实例独立运行在一个Task中 这个Task只有这个实例,不允许有别的Activity存在。
2, xml 文件解析及特点
Android 中xml解析共有三种:Dom ,Sax ,Pull
Dom解析xml是先把xml文档读到内存中然后再用Dom Api来访问树形结构 并获取数据。又Dom解析方式可以知道 如果xml文件很大的时候处理效率就会变的比较低,这是Dom 的一个缺点。
Sax 是Simple API for xml 的缩写 是一个包也可以看成一个接口。相比Dom而言SAX解析是一个速度更快,更有效,占用内存更少的解析xml文件的方式,它是逐行扫描,可以做到边扫描边解析的 因此sax可以再解析文档的任意时刻停止解析,非常适合android移动设备。Sax的缺点 只能读 不能修改
Pull解析 的运行方式和sax解析很相似,它也是事件触发,它综合的dom和sax的有点所以在android设备上推荐使用pull解析
3,Serializable和Parcelabe区别
在android中这两个都是对象的序列化
在使用内存的时候 Parcelabe 比Serializable性能高
Serializable在序列化的时候会产生大量的临时变量从而引起频繁的gc
Parcelable不能使用在将数据存储到磁盘上 因为Parcelable不能很好的保证数据的持续性在外界的变化。尽管Serializable效率底还是建议使用Serializable
4,handler 和AsyncTask的理解
AsyncTask是android中提供的轻量级的异步操作类
使用优点: 简单,快捷 过程可以控制
使用缺点:在使用多个异步操作和并需要进行ui的变更时 就变的复杂起来。
Handler 异步实现时,涉及到 Handler, Looper, Message,Thread四个对象,内存不足实现异步的流程是主线程启动Thread(子线程)thread(子线程)运行并生成Message-Looper获取Message并传递给Handler Handler逐个获取Looper中的Message,并进行UI变更。
使用优点:结构清晰,功能定义明确 对于多个后台任务时,简单,清晰
AsyncTask 在代码上比起handle轻量而底层是一个线程池 相比handler更消耗资源
5,service的生命周期
Service 本地服务的生命周期 context.onStartService()-->onCreate()->onStart()[onStartCommand()]--> onStopService()-->onDestory()
service远程服务生命周期:context.bindService()->onCreate()->onBind()->Service running--调用>onUnbind() -> onDestroy()
6, Activity的生命周期
onCreate ---> onStart ---> onResume --->onPause--->onStop ---->onDestory
7,Listview和BaseAdapter的联系
Listview 和数据,adapter绑定 一条数据对应adapter中的一个getview的 adapter使用用于在listview中显示数据的
8,五中布局模式
LinearLayout,FrameLayout,AbsoluteLayout,RelativeLayout,TableLayout
Android 默认的布局是 RelativeLayout
9,谈谈mvc中android中的使用
Mcv(Modle-view-Controller) m业务逻辑模型 V 视图模型 C 控制器
视图(View) xml 和 javascript+html 等作为view层
控制层(controller) activity 通过Activity交割modle业务逻辑层的处理
模型(model) 对数据库,对网络操作都是在model里面处理
Android中数据的绑定也都采用mvc的框架来实现如Listview 将数据封装成ListAdapter并传递给Listview 数据就在Listview中实现
10,基于AIDL 夸进程通信的实现是怎样的?
在android中每个应用程序都有自己的进程 在java中式不支持夸进程内存共享的。在android中要达到这种效果采用AIDL(android interface Definition language) 接口定义语言 他是用于生成可以在android设备上两个进程之间进行通信(IPC)的代码 如果在一个进程中要调用另外一个进程的对象 就可以使用aidl生成可序列化的参数。
实现: 创建.aidl 文件 保存让ADT帮我们生成对应的java文件 向客服端公开接口如果是编写服务应该继承Service并重载service.onBind()以返回接口对象的实例
11,android 应用开发时怎么检查内存泄露?
使用memory analyzer tool (MAT) android手机要插入sdcard 连接设备到pc在ddms中选择要测试的进程然后点击update heap 和Dump hprof file两个按钮 .hprof文件会自动保存到sd上 通过sdk中的工具打开该文件进行分析内存泄露的情况
12,android sdk中那个工具可以帮助你优化界面?
可以使用layoutopt进行布局的优化
13,用什么工具可以反编译android应用程序?
Apk反之理 , apktool ,Apkdb_Setup160beta3
14,怎么样进行android 应用的性能分析?
可以使用android自带的TraceView进行性能的分析
15,谈谈设计模式,java虚拟有哪些了解?
创建模式:单例模式,工厂模式,建造模式,原型模式
行为模式:模板模式,中介模式,观察模式,访问模式,命令模式,责任链模式,策略模式,解释器模式,备忘录模式,状态模式
结构模式:适配器模式,桥接模式,组合模式,装饰模式,外观模式,代理模式,享元模式
Java虚拟机(Java Virtual Machine,简称JVM)是一种假想的计算机。从结构上看,它由抽象的指令集、寄存器组、类文件格式规定、堆栈、内存垃圾收集器和存储区六个部件组成。指令集采用与平合无关的字节码形式,寄存器组中包含程序计数器、堆栈指针、运行环境指针和变量指针,类文件也与平台无关,堆栈用来传递参数和返回运行结果,垃圾收集器收集不再使用的内存片段,存储区则用来存放字节码。JVM仅仅规定部件的功能和规格。虽然这些功能和规格是统一的,但是并没有规定这此部件的具体实现技术,就是说,可以用任何一种技术来实现。
张广涛 1207834821
http://www.cnblogs.com/zhangguangtao/
http://zhushou.360.cn/detail/index/soft_id/1737925