gpt4 book ai didi

android - 弱引用对象已在静态 Handler 中被垃圾回收

转载 作者:太空宇宙 更新时间:2023-11-03 12:38:30 25 4
gpt4 key购买 nike

给定代码

 private static class MyHandler extends Handler 
{
private final WeakReference<MainActivity> mTarget;
MyHandler(MainActivity intarget) {
mTarget = new WeakReference<MainActivity>(intarget);
}

@Override
public void handleMessage(Message msg)
{
MainActivity target = mTarget.get(); // target becomes null will causes null pointer exception
switch (msg.what) {
..
}
}
}

为了避免 NullPoinetrException 我可以使用:

if(target != null {
// do something
}

但是当 target 变为 null 时,我无法在应用程序中继续进行。

问题:

有什么办法可以在 target 变为 null 时取回它并继续进行,还是我应该完成 activity 或应用程序?

谢谢。

最佳答案

使用您始终需要引用为弱引用的对象背后的原因是什么?

引用用作缓存,而不是作为可以自由访问的对象。一旦 GC 认为不需要弱引用,就会将其删除,即使需要它们也是如此。

此外,WeakReference 永远不会变为 null。它的内容可能变为 null,但引用本身仍然是一个有效的 WeakReference。它将为空,但不为空。空对象和 null 对象之间有区别:空对象仍然在内存中分配。

我只是删除 WeakReference 并将 MainActivity 存储为完整对象。如果您遇到内存泄漏,请修复您的内存泄漏,而不是尝试解决它们。

关于android - 弱引用对象已在静态 Handler 中被垃圾回收,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12813653/

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