【发布时间】:2010-11-23 15:32:44
【问题描述】:
我的应用程序有以下框架: 1. 在后台运行的网络线程(队列),用于发出请求并获取异步响应。线程在应用程序对象中启动和停止,因此它离开了整个应用程序。 2. 一个 DataManager,它也是 Application 的成员,并且对于我从网络检索的数据类型具有不同的 DataManager。数据管理器本身是网络响应的监听器,因此在应用程序本身死亡之前它是安全的。 3.这是有问题的部分。我的一些适配器和部分活动是我的数据管理器的数据侦听器,这意味着数据管理器保留对它们的引用。
当发生电话或其他电话事件时,我注意到该活动通常处于暂停状态且未销毁,因此可以接收我的事件,这没关系。当 Landscape\portrait 改变时,问题就开始了。因为我在应用程序绑定对象中保留了对活动的引用,所以一方面不能销毁活动,但事件仍然到达监听器,只有错误的...... 基本上我可以通过删除 onDestroy 中的侦听器并保留配置布尔值来解决该问题,告诉我请求已经存在问题,我只需要放置一个侦听器并尝试从数据管理器中检索数据。
但是 :-) 我想知道 android 通常如何处理这种情况,例如,如果这是一个正在运行的服务。或者如果服务是本地服务,它使用 Bound 并将 Activity 作为侦听器传递给网络事件,同样的事情会发生,直到侦听器没有被移除,活动被泄漏并继续存在,但没有它,没有办法从网络获取回调... Intent 需要对可能很重的数据进行序列化和反序列化(例如位图?)
无论如何,假设我在收到的每个回复上都发送了一个意图,我如何获得 Activity 的意图(我知道 getIntent,但如果我得到另一个不相关的,我是否将其作为“事件' ?)
【问题讨论】:
标签: android memory-leaks android-activity