码迷,mamicode.com
首页 > 移动开发 > 详细

经典Android面试题

时间:2015-10-20 23:59:26      阅读:484      评论:0      收藏:0      [点我收藏+]

标签:

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实现的原理是什么?

 

 

  

 

经典Android面试题

标签:

原文地址:http://www.cnblogs.com/SamSarah/p/4896384.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!