我已经成功完成了一个 Android 项目的实现,并开始测试应用程序的内存泄漏。
有时,我DeadObjectException
在应用程序中进行了一次长途旅行后,所有的内存分配都被释放了。
我怎样才能检测到这个问题?
我对 DDMS 工具检测内存泄漏进行了一些研究,由于我不DeadObjectExeption
知道,我不知道从哪里开始。
我已经成功完成了一个 Android 项目的实现,并开始测试应用程序的内存泄漏。
有时,我DeadObjectException
在应用程序中进行了一次长途旅行后,所有的内存分配都被释放了。
我怎样才能检测到这个问题?
我对 DDMS 工具检测内存泄漏进行了一些研究,由于我不DeadObjectExeption
知道,我不知道从哪里开始。
这不是内存泄漏问题。内存泄漏的定义(来自维基百科):
计算机科学中的内存泄漏(或在此上下文中的泄漏)发生在计算机程序获取内存但未能将其释放回操作系统时。
在这里,你有一个相反的情况——内存在它应该释放之前被释放(至少从你的程序的角度来看)。
来自 developer.android.com:
DeadObjectException扩展 RemoteException
您正在调用的对象已经死亡,因为它的托管进程不再存在。
例如:
你有课程MyActivity
和MyService
. 您使用Handler
/Messenger
在它们之间进行通信。
您在 中创建Handler
and ,然后通过. 然后你做一些事情,时间流逝,你的被摧毁,连同它的和。现在,如果你处理不好,就不会知道他拥有的不再有效,所以,他试图通过它发送一些东西,并得到:Messenger
MyActivity
Messenger
MyService
Intent
MyActivity
Handler
Messenger
MyService
Messenger
DeadObjectexception
/* 向该 Messenger 的处理程序发送消息。
参数:
message 要发送的消息。通常通过 Message.obtain() 检索。
抛出:
RemoteException如果目标 Handler 不再存在,则抛出 DeadObjectException。* /
公共无效发送(消息消息)抛出 RemoteException {...}
如果您从本地库(.so 文件)调用任何函数,只需检查创建 JNI 函数时使用的包名称是否与您在 Java 类中声明本地方法相同。