一、UI的绘制过程,常见优化手段以及原理
二、有几种常见的单例模式?对于这几种单例模式synchronized具体锁的是什么东西?
三、问内存优化你做过没有?一张十万乘以十万的图片,如何加载才不会内存溢出?
有关内存优化:
有关加载大图片,且避免OOM:
Android高效加载大图、多图解决方案,有效避免程序OOM
四、问内存溢出,内存抖动,内存泄漏你都碰到过吗?怎么解决的?如何区分这几种情况?怎么解决由内存泄漏而导致的内存溢出?
五、简述Rxjava的原理。
六、问Handler源码分析。
一、Handler封装了消息的发送(主要包括消息发送给谁,以及如何去发送。默认情况下消息都是发送给Handler自己)。
二、Looper:轮询,消息封装的一个载体,
1、Looper内部包含一个消息队列也就是MessageQueue,所有的Handler发送的消息都走向这个消息队列;
2、Looper.looper方法,就是一个死循环,不断地从MessageQueue取消息,如有消息就处理,没有就阻塞;
三、MessageQueue,就是一个消息队列,可以添加消息,并处理消息。
四、Handler也很简单,内部会跟Looper进行关联,也就是说在Handler的内部可以找到Looper,找到了Looper也就找到了MessageQueue,在Handler中发送消息,其实就是向MessageQueue队列中发送消息。
总结:Handler负责发送消息,Looper负责接收Handler发送的消息,并直接把消息回传给Handler自己,MessageQueue就是一个存储消息的容器。
七、线程间通信。
安卓中的几种线程间通信方式(更加全面)
- EventBus
- runOnUiThread()
- post()和postDelay()
- Handler + Message或者Handler + Thread + Message
- Broadcast
- AsyncTask
- 通过Handler机制
- runOnUiThread方法
- View.post(Runnable r)
- AsyncTask