26 handler不加static为什么会有内存泄露.
同一个线程下的handler共享一个looper对象,消息中保留了对handler的引用,只要有消息在队列中,那么handler便无法被回收,如果handler不是static,那么使用Handler的Service和Activity就也无法被回收,即便它们的ondestroy方法被调用。这就可能导致内存泄露。当然这通常不会发生,除非你发送了一个延时很长的消息。
但把hanlder添加为static后,会发现在handler中调用外部类的方法和成员变量需要它们都定义为final,这显然是不大可能的。这里建议在你的Service或Activity中的增加一个内部static Handler类,
这个内部类持有Service或Activity的弱引用,这样就可以解决final的问题。
27 handler中遇到不加static会出现警告,而我们还要引用成员变量,该怎样解决
外部类的方法和成员变量需要它们都定义为final,
28 application的framework,library分别有什么
framework是程序的结构.类库是构建程序的部件.
29 为什么不能在broadcastreceiver中开启子线程
BroadcastReceiver的生命周期很短,子线程可能还没有结束BroadcastReceiver就先结束了。
BroadcastReceiver一旦结束,此时BroadcastReceiver的所在进程很容易在系统需要内存时被优先杀死,
因为它属于空进程(没有任何活动组件的进程)。如果它的宿主进程被杀死,那么正在工作的子线程也会被杀死。
所以采用子线程来解决是不可靠的。
30 jvm与dalvik的区别
编译后文件格式 基于架构 Jvm .java->.class->.jar 基于栈的架构 Dalvik .java->.class->.dex->.odex 基于寄存器的架构
1. 架构不同:JVM使用栈架构;Dalvik使用的是寄存器,数据是加载到CUP的
寄存器上的。
2. JVM加载的.class文件,Dalvik加载的是.dex文件,对内存的分配情况做
了优化。
31 jvm是怎样工作的
32 当前的activity是singletop的,而且在栈的最顶端,如果我们从service中执行startAcitvity来开启这个activity,会执行哪些方法
onResume()-onRestart()
如果我要让手机每三天做一件事,你会怎么设计,有哪些需要注意的
画一下你的app的模型图
如果调用Service的onStart方法,再调用onBind方法,最后调用onStop方法,会怎样
11. Serializable和Parceable有什么区别,分别在什么情况下使用 12. 为什么HttpConnection会涉及到基站问题而HttpClient不会 13. ImageLoader内部是怎样实现的
14. 怎样在子线程中实现handler,并用handler接收消息 15. intent传递数据时为什么要继承parceable或serializeble接口,而且没有实现任何方法
16. 有一个很难复现的bug,而且很急,你会用什么方法找到这个bug 17. 有一个图片墙,我会向下滑动--停,向下滑动--停??,要怎样避免OOM
33 跨进程通信
33.1 原理
Android中的跨进程通信采用的是Binder机制,其底层原理是共享内存。
33.2 为什么不能直接跨进程通信?
为了安全考虑,应用之间的内存是无法互相访问的,各自的数据都存在于自身的内存区域内。
33.3 如何跨进程通信?
要想跨进程通信,就要找到一个大家都能访问的地方,例如硬盘上的文件,多个进程都可以读写该文件,通过对该文件进行读写约定好的数据,来达到通信的目的。
? Binder在linux层面属于一个驱动,但是这个驱动不是去驱动一个硬件,而且驱动一小段内存。
? 不同的应用通过对一块内存区域进行数据的读、写操作来达到通信的目的。 ? 不同的应用在同一内存区域读写数据,为了告知其他应用如何理解写入的数据,就需要一个说明文件,这就是AIDL。当两个应用持有相同的AIDL文件,就能互相理解对方的的意图,就能做出相应的回应,达到通信的目的。