标签:
1.解释下在单线程模型中Message,Handler,Message Queue,Looper之间的关系。
主线程中,主线程启动时会调用Looper.prepare()方法,会初始化一个Looper,放入Threadlocal中,接着调用Looper.loop()遍历Message Queue; Handler的创建依赖与当前线程中的Looper,如果当前线程没有Looper则必须调用Looper.prepare()。Handler,sendMessage到MessageQueue,Looper不断从MessageQueue中取出消息,回调handleMeaage方法。
2.内存溢出和内存泄漏的区别?何时会产生内存泄漏?内存优化有哪些方法?
内存溢出:应用程序运行时需要的内存,超出了它可用的最大内存
内存泄漏:针对某一内存空间的使用,使用完成后没有释放。
内存优化:Android中容易内存溢出的部分,就是图片的加载,我们可以使用图片的压缩加上使用LruCache缓存的方法来控制图片所能够使用的内存
除此之外,对于比较耗资源的对象及时的关闭,比如service、conn、各类传感器、Database
3.AsyncTask使用在哪些场景?它的缺陷是什么?如何解决?
AsyncTask运用的场景是需要进行一些耗时的操作,耗时操作完成时更新主线程,或者在操作过程中对主线程的UI进行更新
缺陷:AsyncTask中维护着一个长度为128的线程池,同时可以执行5个工作线程,还有一个缓冲队列,当线程池中已有128个线程,缓冲队列已满,如果此时向线程提交任务,将会抛出RejectedExecutionException
处理:由一个线程来处理AsyncTask的调用判断线程池是否满了,如果满了线程睡眠否则请求AsyncTask继续处理。
4.AsyncTask实现的原理是什么?
标签:
原文地址:http://www.cnblogs.com/SamSarah/p/4896384.html