adt2.0的开发者们可能会在handler上发现这么一条警告:This Handler class should be static or leaks might occur 。
首先在ADT 20 Changes我们可以找到这样一个变化:New Lint Checks:

Look for handler leaks: This check makes sure that a handler inner class does not hold an implicit reference to its outer class.


翻译过来就是,Lint会增加一个检查项目即:确保class内部的handler不含有外部类的隐式引用 。

同一个线程下的handler共享一个looper对象,消息中保留了对handler的引用,只要有消息在队列中,那么handler便无法被回收,如果handler不是static那么使用Handler的Service和Activity就也无法被回收。这就可能导致内存泄露。当然这通常不会发生,除非你发送了一个延时很长的消息。

官方推荐 将 handler 设为static  成文单太类

   在里面 使用  弱引用 WeakReference 



 WeakReference则类似于可有可无的东西。在垃圾回收器线程扫描它所管辖的内存区域的过程中,一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内存,说白了就是一个没那么strong要求垃圾回收器将一个对象保留在内存中。不过,由于垃圾回收器是一个优先级很低的线程,因此不一定会很快发现那些只具有弱引用的对象。

在线程中直接调用

Loop.prepare();

toast.show();

Loop.loop();

在分线程弹出Toast之前把Looper准备好,实验表明,这样确实可以达到效果。可以把Toast弹出来。

但是这样有个问题,就是会导致分线程永远不会退出。这个原理大家看看Looper.loop()是怎么实现的就知道了,它里面是一个死循环。

这样的话,会导致进程里面的线程越来越多

更多相关文章

  1. android获取进程信息,运行内存信息
  2. Android 一个下载任务分为多个线程下载
  3. Android 多线程1
  4. Python获取android设备cpu和内存占用情况
  5. android 之json对象解析并展示(含json解析源码)
  6. Android 处理多线程 UserTask

随机推荐

  1. 测试你的Android应用程序
  2. Android的screenOrientation设置
  3. android 每天定时提醒功能实现
  4. 一些非常实用的 Android 开发资源
  5. Android 将APK文件安装到AVD中并分析其界
  6. android客户端向服务器提交请求的中文乱
  7. 招募Android手机游戏开发团队成员(学员)
  8. 移动开发:fb的-app.xml文件
  9. android中的单位
  10. android 调用图库中选择的图片