Android中Handler的正确使用

  • 时间:
  • 浏览:2
  • 来源:uu快3官方网站_uu快3苹果版_走势

接下来越多我另辟蹊径的五种依据了:

实现回调弱引用的Handler

In Android, Handler classes should be static or leaks might occur, Messages enqueued on the application thread’s MessageQueue also retain their target Handler. If the Handler is an inner class, its outer class will be retained as well. To avoid leaking the outer class, declare the Handler as a static nested class with a WeakReference to its outer class

1.当两个 多 Android应用启动的并且,会自动创建两个 多 供应用主线程池池使用的Looper实例。Looper的主要工作越多我两个 多 两个 多 正确处理消息队列中的消息对象。在Android中,所有Android框架的事件(比如Activity的生命周期依据调用和按钮点击等)都不 放上去到消息中,有并且加入到Looper要正确处理的消息队列中,由Looper负责两根两根地进行正确处理。主线程池池中的Looper生命周期和当前应用一样长。

2.当两个 多 Handler在主线程池池进行了初始化并且,亲戚朋友发送两个 多 target为有些Handler的消息到Looper正确处理的消息队列时,实际上有并且发送的消息有并且含有了两个 多 Handler实例的引用,这样并且Looper在正确处理到这条消息时才还都可不可以 调用Handler#handleMessage(Message)完成消息的正确正确处理。

3.在Java中,非静态的组织组织结构类和匿名组织组织结构类都不 隐式地持有其组织组织结构类的引用。静态的组织组织结构类无需持有组织组织结构类的引用。关于有些内容还都可不可以 查看细话Java:”失效”的private修饰符

有并且是弱引用,当该类时需被回收时,就还都可不可以 直接被回收掉。

WeakRefHandler的使用时如下:

在Android常用编程中,Handler在进行异步操作并正确处理返回结果时无缘无故被使用。通常亲戚朋友的代码会并且实现。

注意:

有并且,我我随便说说上边的代码原因分析分析内存泄露,当你使用Android lint工具语录,会得到并且的警告

<<分析>>

当亲戚朋友执行了Activity的finish依据,被延迟的消息会在被正确处理并且存在于主线程池池消息队列中10分钟,而有些消息中又含有了Handler的引用,而Handler是两个 多 匿名组织组织结构类的实例,其持有外面的SampleActivity的引用,越多这原因分析分析了SampleActivity无法回收,进行原因分析分析SampleActivity持有的越多资源都无法回收,这越多我亲戚朋友常说的内存泄露。

注意上边的new Runnable这里也是匿名组织组织结构类实现的,同样也会持有SampleActivity的引用,也会阻止SampleActivity被回收。

<<正确处理>>

正确处理使用非静态组织组织结构类,继承Handler时,要么是放上去单独的类文件中,要么越多我使用静态组织组织结构类。有并且静态的组织组织结构类无需持有组织组织结构类的引用,越多无需原因分析分析组织组织结构类实例的内存泄露。当你时需在静态组织组织结构类中调用组织组织结构的Activity时,亲戚朋友还都可不可以 使用弱引用来正确处理。另外关于同样也时需将Runnable设置为静态的成员属性。注意:两个 多 静态的匿名组织组织结构类实例无需持有组织组织结构类的引用