【问题标题】:Android Leaked Service ConnectionAndroid泄露服务连接
【发布时间】:2019-05-05 20:17:30
【问题描述】:

我正在使用 JobIntent 服务来执行一些操作。我从屏幕 A 开始服务。

服务完成工作后,我从 JobIntent 服务向屏幕 A 发送回调。然后屏幕 A 立即完成并打开一个新屏幕,比如 B。

我注意到有一条日志说明服务连接泄漏。以下是日志

android.app.ServiceConnectionLeaked: Activity Package.ScreenA has leaked 
ServiceConnection Package.ServiceName$1@7a41f83 that was originally bound here

此错误是什么意思?如果此错误继续存在,是否会造成任何损害?可以做些什么来防止此类错误?

尽管我不确定,但服务持有 screenA 的上下文引用,这就是为什么会发生这种情况?

提前致谢!

【问题讨论】:

    标签: java android android-service android-service-binding serviceconnection


    【解决方案1】:

    注意 JobIntentService 内存泄漏

    通过activity.getApplicationContext() — 然后静态映射将间接持有Application对象实例引用。

    您可以阅读这篇文章,这将对您有所帮助。

    https://medium.com/@luszczuk/watch-out-for-jobintentservice-memory-leak-828a629ab085

    图片来源:Michał Łuszczuk

    【讨论】:

    • 感谢您提供非常有帮助的答案。祝你有美好的一天:)
    • 只是另一个疑问。泄露服务连接有什么负面影响?
    • 这些是与旧版本的兼容性问题。所以显然没有严重的伤害。但最好处理它。祝你好运
    • 感谢您的澄清。
    • 嗨,我还有一个疑问,您能否也尝试回答一下。如果多个 JobIntentService 由相同的上下文启动,它们可以并行运行吗?如果是,多少个 JobIntentService 可以并行运行。
    【解决方案2】:

    @Rahulrr2602 请使用此图表来了解每个的限制。

    【讨论】:

    • 再次感谢您的精彩回答。你真的是一个知识渊博、乐于助人的人。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-25
    • 2021-04-06
    • 1970-01-01
    • 2014-03-08
    • 1970-01-01
    相关资源
    最近更新 更多