代码可能太复杂,无法在此处完整发布,但这里是基本架构:我有两个Activity
子类,每个子类都承载一个ListView
. 每个ListView
都有一个自定义类的适配器,它View
也生成自定义类的实例。这些列表显示了在另一个线程中异步生成的数据项;因为它需要知道将更新发送到哪里,所以它操作的数据对象有WeakReference<>
设置为在初始化时保存对显示其内容的适配器的引用的对象。当第一个活动列表中的一个对象被选中时,我启动第二个活动的意图是指示它查找项目并显示其内容。然后我使用“返回”按钮关闭第二个活动并返回第一个活动。出于某种原因,当我在StrictMode
启用检查的情况下运行它时,它总是在两个活动之间切换几次迭代后崩溃,抱怨我的一个类的实例太多Activity
。
我已经安排在崩溃之前编写一个堆转储(请参阅Android StrictMode 和堆转储)。这些堆转储始终显示在终止时堆上的两个活动中的每一个都有 1 个实例。首先,当我最近在两者之间切换时,这难道不是意料之中的吗?如果是这样,为什么要StrictMode
抱怨这个?如果不是预期的,我该如何安排避免这种情况?检查堆转储,这两个对象都是从主线程堆栈中引用的,对此我似乎没有任何有用的控制程度。每个也有来自 的参考android.app.ActivityThread$ActivityClientRecord
,我似乎也无法控制。
所以,基本上,有什么想法可以避免这种情况吗?这实际上是否代表活动泄漏,或者 StrictMode 只是过于敏感?