Pra*_*een 3 android weak-references nullpointerexception handler
鉴于代码
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) {
..
}
}
}
Run Code Online (Sandbox Code Playgroud)
为了避免NullPoinetrException,我可以使用:
if(target != null {
// do something
}
Run Code Online (Sandbox Code Playgroud)
但是当目标变为空时,我无法在应用程序中继续进行.
问题:
当它变为空并进一步继续或者我应该完成活动或应用程序时,有没有办法找回目标?
谢谢.
使用对象总是需要作为WeakReference引用的原因是什么?
引用用作缓存,而不是自由访问的对象.一旦GC认为不需要WeakReferences将被擦除,即使它们将被需要.
此外,WeakReference永远不会变为空.它的内容可能会变为null,但引用本身仍然是有效的WeakReference.它将为空,但不为空.空对象和空对象之间存在差异:仍在内存中分配空对象.
我只是删除WeakReference并将MainActivity存储为完整对象.如果您遇到内存泄漏,请修复内存泄漏,而不是尝试解决它们.
| 归档时间: |
|
| 查看次数: |
2041 次 |
| 最近记录: |