IntentService和活动生命周期

时间:2018-02-07 17:14:26

标签: android google-maps android-intent

我关注了如何在Android中反转地理编码this tutorial,但我无法理解这个IntentService如何很好地处理Activity生命周期。我正在关注this code sample

据我了解,Activity将包含AddressResultReceiver的实例,名为mResultReceiver。当IntentService返回反向地理编码的地址时,它会从mReceiver.send(resultCode, bundle)实例调用mResultReceiver,然后Activity内的用户更新用户界面Activity

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

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

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

  • Activity作为垃圾与被破坏的IntentService一起收集,而mResultReceiver在尝试使用被销毁的类时会抛出异常吗?

  • Activity会阻止原始IntentService被垃圾回收,特别是因为mResultReceiver仍然保留对IntentService对象的引用。当mReceiver.send(resultCode, bundle)调用Activity时,它会对屏幕上的实际$("#autocomplete").autocomplete({ source: function (request, response){ $.ajax({ url: 'autocomplete.txt', dataType: "json", data: { term: request.term, }, success: function (data) { response(data); } }); }, minLength: 2, select: function (event, ui) { var test = ui.item ? ui.item.id : 0; if (test > 0) { alert(test); } } }); 产生影响,或者尝试更新已销毁的UI小部件时抛出异常?

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

1 个答案:

答案 0 :(得分:1)

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

相关问题