Android 面试题2

Android面试题

1,谈谈Activity的四种启动模式

   答:四种启动模式分别是

            Standard   SingleTop  SingleTask SingleInstance

      Standard 是默认的启动模式,可以不用写设置。在该模式下都会默认创建一个新的实例,因此在这种模式下可以有多个相同的实例,也允许多个相同的Activity叠加。

      SingleTop 可以有多个实例,但不允许多个相同的Activity叠加。如果Activity在栈顶的时候,启动相同的Activity不会创建新的实例,而会调用其onNewIntent方法

      SingleTask 只有一个实例,在相同的一个应用程序启动的时候,若Activity不存在则会在当前的task创建一个新的实例,若存在。则会把task中在其之上的其它Activity destory掉并调用它的onNewIntent方法。

如果是在别的应用程序中启动它,则会新建一个task,并在该task中启动这个ActivitysingleTask允许别的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解析很相似,它也是事件触发,它综合的domsax的有点所以在android设备上推荐使用pull解析

3SerializableParcelabe区别

   在android中这两个都是对象的序列化

   在使用内存的时候 Parcelabe Serializable性能高

   Serializable在序列化的时候会产生大量的临时变量从而引起频繁的gc

   Parcelable不能使用在将数据存储到磁盘上 因为Parcelable不能很好的保证数据的持续性在外界的变化。尽管Serializable效率底还是建议使用Serializable

4handler AsyncTask的理解

AsyncTaskandroid中提供的轻量级的异步操作类

使用优点:  简单,快捷 过程可以控制

使用缺点:在使用多个异步操作和并需要进行ui的变更时 就变的复杂起来。

Handler 异步实现时,涉及到 Handler, Looper, Message,Thread四个对象,内存不足实现异步的流程是主线程启动Thread(子线程)thread(子线程)运行并生成Message-Looper获取Message并传递给Handler  Handler逐个获取Looper中的Message,并进行UI变更。

使用优点:结构清晰,功能定义明确 对于多个后台任务时,简单,清晰

AsyncTask 在代码上比起handle轻量而底层是一个线程池 相比handler更消耗资源

5service的生命周期

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

猜你喜欢

转载自blog.csdn.net/zhangguangtao1207/article/details/36382695