我已经成功完成了一个Android项目的实现,并开始测试应用程序是否存在内存泄漏。
有时候,在应用程序长时间运行后,我会遇到DeadObjectException
,而且所有的内存分配都被释放了。
我该如何检测这个问题?
我研究了一些DDMS工具来检测内存泄漏,但由于我对DeadObjectException
没有头绪,不知道从哪里开始。
我已经成功完成了一个Android项目的实现,并开始测试应用程序是否存在内存泄漏。
有时候,在应用程序长时间运行后,我会遇到DeadObjectException
,而且所有的内存分配都被释放了。
我该如何检测这个问题?
我研究了一些DDMS工具来检测内存泄漏,但由于我对DeadObjectException
没有头绪,不知道从哪里开始。
这不是内存泄漏问题。内存泄漏的定义(来自维基百科):
在计算机科学中,内存泄漏(或泄漏)发生在计算机程序获取内存但未将其释放回操作系统时。
在这里,您有一个相反的情况 - 内存在应该释放之前被释放了(至少从您的程序的角度来看)。
来自developer.android.com:
DeadObjectException 扩展 RemoteException
您调用的对象已死,因为其主机进程不再存在。
例如:
你有类 MyActivity 和 MyService。你使用 Handler/Messenger 在它们之间通信。
你在 MyActivity 中创建 Handler 和 Messenger,然后通过 Intent 将创建的 Messenger 实例发送到 MyService。然后你做一些事情,时间过去了,你的 MyActivity 被销毁,它的 Handler 和 Messenger 也一并被销毁。现在,如果你处理不好,MyService 就不知道它拥有的 Messenger 不再有效,所以它试图通过它发送一些东西,并获得 DeadObjectException:
/* 向此 Messenger 的 Handler 发送消息。
Params:
message 要发送的消息。通常通过 Message.obtain() 检索。
Throws:
RemoteException如果目标 Handler 不再存在,则引发 DeadObjectException。/
public void send(Message message) throws RemoteException {...}