Andorid 面试题 集合
1. 如何将打开res aw目录中的数据库文件?
解答:在Android中不能直接打开res raw目录中的数据库文件,而需要在程序第一次启动时将该文件复制到手机内存或SD卡的某个目录中,然后再打开该数据库文件。复制的基本方法是使用getResources().openRawResource方法获得res raw目录中资源的 InputStream对象,然后将该InputStream对象中的数据写入其他的目录中相应文件中。在Android SDK中可以使用SQLiteDatabase.openOrCreateDatabase方法来打开任意目录中的SQLite数据库文件
例子:http://zhan.renren.com/chenelvaq?gid=3602888498034651871&checked=true
2. 什么是ANR
ANR:Application Not Responding。
在Android中,活动管理器和窗口管理器这两个系统服务负责监视应用程序的响应。当出现下列情况时,Android就会显示ANR对话框了:
用户对应用程序的操作(如输入事件,按键、触摸屏事件)在5秒内无响应
广播接受器(BroadcastReceiver)在10秒内仍未执行完毕
Android应用程序完全运行在一个独立的线程中(例如main)。这就意味着,任何在主线程中运行的,需要消耗大量时间的操作都会引发ANR。因为此时,你的应用程序已经没有机会去响应输入事件和意向广播(Intent broadcast)。
避免方法:Activity应该在它的关键生命周期方法(如 onCreate()和onResume())里尽可能少的去做创建操作。
3. 什么是内存泄露
内存不在GC掌控之内了。
当一个对象已经不需要再使用了,本该被回收时,而有另外一个正在使用的对象持有它的引用从而就导致对象不能被回收。这种导致了本该被回收的对象不能被回收而停留在堆内存中,就产生了内存泄漏。
4. 变量的存储位置
a. 成员变量全部存储在堆中(包括基本数据类型,引用及引用的对象实体)---因为他们属于类,类对象最终还是要被new出来的。
b. 局部变量的基本数据类型和引用存储于栈当中,引用的对象实体存储在堆中。-----因为他们属于方法当中的变量,生命周期会随着方法一起结束。
5. 为什么要用appcompat项目
因为里面是谷歌精心准备的---解决android碎片化开发蛋疼的问题,让我们app编译出来在各种高低版本之间、不同的厂商生产的ROM之间显示出来的效果UI控件等有一较一致的体验。
6. Java内部类的作用
http://andy136566.iteye.com/blog/1061951/
7. 必须知道的八大种排序算法
http://www.jianshu.com/p/8c915179fd02
8. 泛型中 extends 和 super 的区别
9. Fragment State Loss
http://toughcoder.net/blog/2016/11/28/fear-android-fragment-state-loss-no-more/
10. [java中equals,hashcode和==的区别 http://blog.csdn.net/hla199106/article/details/46907725
11. 事件的传递与ViewRootImpl类源码解析
http://blog.csdn.net/qianhaifeng2012/article/details/51737370
http://blog.csdn.net/qianhaifeng2012/article/details/51674022
网友评论