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