gpt4 book ai didi

android - IntentService 和 Activity 生命周期

转载 作者:行者123 更新时间:2023-11-30 00:07:49 26 4
gpt4 key购买 nike

我关注了this tutorial关于如何在 Android 中反向地理编码,但我不明白这个 IntentService 将如何很好地处理 Activity 生命周期。我正在关注 this code sample .

据我所知,Activity 将包含 AddressResultReceiver 的一个实例,名为 mResultReceiver。当 IntentService 返回反向地理编码地址时,它将调用 mResultReceiver 实例中的 mReceiver.send(resultCode, bundle),这将然后在 Activity 中更新 UI。

我的问题是这将如何与 Activity 生命周期一起发挥作用。假设 Activity 启动了 IntentService,然后由于某种原因它被销毁了(比如,用户旋转了屏幕)。稍后,当 IntentService 收到 Google Maps 返回的地址时,它会调用从原始 Activity 收到的 mResultReceiver,即现在销毁(或者它可能已经被再次创建,但无论如何,它仍然是一个新实例)。

由于 mResultReceiver 是在创建 Activity 时创建的,并且它不会保存在任何 Bundle 上供以后检索,当IntentService完成并调用原来的mResultReceiver,会发生什么?

  • mResultReceiver 调用是否会自动转发到 Activity 的新实例,就像什么都没发生一样,一切都按预期进行?

  • mResultReceiver 是否会随着被销毁的 Activity 被垃圾回收,IntentService 会在尝试使用销毁类?

  • mResultReceiver 是否会阻止原始 Activity 被垃圾回收,特别是因为 IntentService 仍然持有对 mResultReceiver 对象。当 IntentService 调用 mReceiver.send(resultCode, bundle) 时,它对屏幕上的实际 Activity 没有影响,或者抛出异常尝试更新已损坏的 UI 小部件?

  • 这个 google 例子有缺陷吗?那么正确的做法是什么?

最佳答案

我相信谷歌的例子是有缺陷的。如果 Activity 被销毁,该示例将导致内存泄漏。更好的方法是使用本地广播接收器或事件总线或 RxJava/RxAndroid
Issue is already reported here

关于android - IntentService 和 Activity 生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48669622/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com