在非Activity类中使用非静态Handler是否可以?

时间:2014-06-18 22:57:49

标签: android

我知道为什么使用静态处理程序是个好主意(在处理程序时避免内存泄漏)。但是,我读过的大多数内容似乎都暗示着它是为了防止泄漏应用程序/上下文。所有示例代码都有一个Activity或Service作为外部类。例如,这个经常联系的帖子谈到泄露上下文和视图(http://www.androiddesignpatterns.com/2013/01/inner-class-handler-memory-leak.html)。它的结尾是“什么是底线?如果内部类的实例比活动的生命周期更长,则避免在活动中使用非静态内部类。相反,更喜欢静态内部类并保持对内部活动的弱引用。”< / p>

这是否意味着如果拥有类没有与Android生命周期相关的任何字段且不是活动/服务/等,则使用非静态处理程序是可以的。我原以为是这样,但Lint警告并不关心外类是什么类。我知道我仍然可以泄漏我的外层阶级及其领域,但在我的情况下,至少它几乎没有。

1 个答案:

答案 0 :(得分:0)

我不会说它没关系,但也许它不那么糟糕。上下文是一个特别重要的泄漏事件。泄漏你的封闭课程可能不是什么大问题。然后,它可能会。

基本上,当邮件延迟发布时会发生处理程序泄漏。 Message包含对Handler的引用,因此Handler在处理Message之前仍然可以访问。请注意,即使没有明确的延迟,Looper队列中可能还有其他任务必须在处理消息之前完成,因此可能会有轻微的延迟。如果上下文(或处理程序引用的任何其他内容)在此期间变为无效,则可能导致错误。