Android死对象异常

时间:2011-08-12 07:52:29

标签: android memory-leaks ddms

我已经成功完成了android项目的实现,并开始测试应用程序的内存泄漏。有时候,我在应用程序中长途旅行后会获得deadobject异常并释放所有内存分配。我怎样才能发现这个问题?我已经对DDMS工具进行了一些研究来检测内存泄漏,由于我不知道DeadObjectExeption,我不知道从哪里开始。

提前致谢..

2 个答案:

答案 0 :(得分:31)

这不是内存泄漏问题。内存泄漏的定义(来自维基百科):

  

计算机科学中的内存泄漏(或泄漏,在此上下文中),   当计算机程序获取内存但无法释放时发生   回到操作系统。

在这里,你有一个相反的情况 - 内存在它应该被释放之前(至少从你的程序的角度来看)。

来自developer.android.com:

  

DeadObjectException 扩展了RemoteException

     

您呼叫的对象已经死亡,因为其托管过程已不复存在。

例如:

您有MyActivity和MyService类。您使用Handler / Messenger在它们之间进行通信。 您在MyActivity中创建Handler和Messenger,然后通过Intent将创建的Messenger实例发送到MyService。然后你做了一些事情,时间过去了,你的MyActivity被破坏了,还有它的Handler和Messenger。现在,如果你处理得不好,MyService就不会知道他拥有的Messenger不再有效了,所以,他试图通过它发送一些东西,并获得DeadObjectexception:

  

/ *   向此Messenger的处理程序发送消息。

     

参数:

     

消息要发送的消息。通常通过Message.obtain()。

检索      

抛出:

     

RemoteException 如果目标处理程序不再存在,则抛出DeadObjectException。* /

     

public void send(消息消息)抛出RemoteException {...}

答案 1 :(得分:0)

如果从Native Library(.so文件)调用任何函数,只需检查创建JNI函数时使用的包名称与在Java类中声明本机方法相同。