【问题标题】:Shutting down Android Looper关闭 Android Looper
【发布时间】:2023-03-30 08:04:01
【问题描述】:

似乎Looper(至少是用HandlerThread 创建的那个)即使没有被其他代码引用,也永远不会被垃圾收集。我知道quit()quitSafely() 方法,但是在我的应用程序中我不确定谁将负责调用这些方法之一。

在具有多个活动的应用程序中关闭Looper 的正确方法是什么,并且在此Looper 上创建的Handlers 的生命周期与其中的活动不同。它不能是任何活动的onDestroy()。如果我不关闭它并且该进程没有被操作系统杀死 - 新的Looper 可能会在下一个应用程序“启动”时创建,并且这个会泄漏。或者,创建一次,存储在静态字段中,永不退出,让它泄漏一次。到目前为止,最后一个似乎是最安全和最容易实施的。

【问题讨论】:

    标签: android android-looper


    【解决方案1】:

    在具有多个活动的应用程序中关闭 Looper 的正确方法是什么?在此 Looper 上创建的处理程序的生命周期与其中的活动不同

    使用Service

    它有自己的Looper,自己的生命周期,可以像activity一样在主线程中工作。

    您可以使用LocalBroadcastManager 从中获取回调。

    【讨论】:

    • 您是否建议使用Service 来管理Looper 的生命周期?如果是这样,正如我之前所说 - 我什至不知道何时将其关闭。在这种情况下,Service 应该大致相当于我的静态字段。或者,如果您建议使用Service 在非主线程上工作,我对Handlers 相互发送Messages 特别感兴趣。
    • 使用一项服务,您不必处理Looper 的生命周期。您可以将其绑定到Service 生命周期并让系统管理它。如果你真的想使用Handler,你可以使用ResultReceiver 来处理来自Service 的Messages。
    猜你喜欢
    • 2014-09-02
    • 2014-04-19
    • 2013-09-17
    • 2011-02-17
    • 2011-10-10
    • 1970-01-01
    • 1970-01-01
    • 2014-10-03
    • 2012-10-04
    相关资源
    最近更新 更多