Android一些面试题

1>. Android 系统中 GC 什么情况下会出现内存泄露呢?

出现情况:

        1. 数据库的 cursor 没有关闭

        2.构造 adapter ,没有使用缓存contentview

        3. Bitmap 对象不使用时采用 recycle()释放内存

        4.activity 中的对象的生命周期大于activity

2>Android垃圾回收的机制

用以跟踪正在使用的对象和发现并回收不再使用的对象,    有效防范因内存垃圾内存过多而引发的内存耗尽以及不恰当的内存释放所造成的内存非法引用的2个动态内存分配造成的危险;

3>什么是ANR?如何避免?

ANR:Application Not Responding Android ,活动管理器和窗口管理器这两个系统服务负责监视应用程序的响应,出现此情况有2种:

1.用户对应用程序的操作(如输入事件,按键、触摸屏事件)5秒内无响应

扫描二维码关注公众号,回复: 3971455 查看本文章

2. 广播接受器(BroadcastReceiver)10秒内仍未执行完

原因是:任何在主线程中运行的,需要消耗大量时间的操作都会引发 ANR

4> Androiddvm的进程和Linux的进程, 应用程序的进程是否为同一个概念

DVM  dalivk 的虚拟机。每一个 Android 应用程序都在它自己的进程中运行,都拥有 一个独立的 Dalvik 虚拟机实例。而每一个 DVM 都是在 Linux 中的一个进程,所以说可以 认为是同一个概念。

5>如果后台的 Activity由于某原因被系统回收了,如何在被系统回收之前保存当前状态?

   A跳转到B,A被回收:重新调用onCreate();A没有回收:重写onsavedInstanceState ()

6>请解释在单线程模式中Message,Handler,Message Queue,Looper之间的关系

7> DDMS  TraceView的区别?

DDMS 是一个程序执行查看器,在里面可以看见线程和堆栈等信息,TraceView是程序性能

8>Activity的启动模式:

4种 activity 的启动模式


1standard: 标准模式,一调用 startActivity()方法就会产生一个新的实例。

2singleTop: 如果已经有一个实例位于 Activity 栈的顶部时,就不产生新的实例,而只是调用 Activity 中的 newInstance()方法。如果不位于栈顶,会产生一个新的实例。

3singleTask: 会在一个新的 task 中产生这个实例,以后每次调用都会使用这个,不会去产生 新的实例了。

4singleInstance: 这个跟 singleTask基本上是一样,只有一个区别:在这个模式下的 Activity 实例所处的 task ,只能有这个 activity 实例,不能有其他的实例。

 

9>根据自己的理解描述下 Android数字签名。

  1. 所有的应用程序都必须有数字证书,Android 系统不会安装一个没有数字证书的应用程序
  2. Android 程序包使用的数字证书可以是自签名的,不需要一个权威的数字证书机构签名认证

(3)如果要正式发布一个 Android 程序,必须使用一个合适的私钥生成的数字证书来给程序签名,而不能使用adt 插件或者 ant 工具生成的调试证书来发布。

10>android 中有哪几种解析 xml 的类,官方推荐哪种?以及它们的原理和区别.

DOM 解析 优点:

1.XML 树在内存中完整存储,因此可以直接修改其数据和结构. 2.可以通过该解析器随时访问 XML 树中的任何一个节点.


3.DOM 解析器的 API 在使用上也相对比较简单.
缺点:如果 XML 文档体积比较大时,将文档读入内存是非常消耗系统资源的.
使用场景:DOM 是用与平台和语言无关的方式

SAX 解析优点:


SAX 内存的要求比较低,因为它让开发人员自己来决定所要处理的标签.特别是当开发人员只需要处理文档中所包含的部分数据时,SAX 这种扩展能力得到了更好的体现.
缺点:
 SAX 方式进行 XML 解析时,需要顺序执行,所以很难访问到同一文档中的不同数据.此外在基于该方式的解析编码过程也相对复杂.
使用场景对于含有数据量十分巨大,而又不用对文档的所有数据进行遍历或者分析的时候,使用该方 法十分有效.该方法不用将整个文档读入内存,而只需读取到程序所需的文档标签处即可.


pull 解析是基于流(stream)操作文件,然后根据节点事件回调开发者编写的处理程序.因为是基于流的处理,因此 pull  sax 都比较节 约内存资源,不会象 dom 那样要把所有节点以对象树的形式展现在内存中.pull  sax更简明,而且不需要扫描完整个流.

11>Socket 通信编程 客户端编程步骤:

1、 创建客户端套接字(指定服务器端 IP 地址与端口号)

2、 连接(Android 创建Socket时会自动连接)

3、 与服务器端进行通信

4、 关闭套接字

服务器端:

1.创建一个 ServerSocket,用于监听客户端 Socket 的连接请求

2.采用循环不断接受来自客户端的请求

 

程序题

1.请继承 SQLiteOpenHelper 实现

1).创建一个版本为1的“diaryOpenHelper. db”的数据库,

2).同时创建一个 “diary” 表(包含一个_id主键并自增长,topic字符型100

长度, content 字符型1000长度)

3).在数据库版本变化时请删除 diary ,并重新创建出 diary 


猜你喜欢

转载自blog.csdn.net/nzw31/article/details/50587980