如何解决DeadObjectException问题?

问题描述 投票:12回答:2

我已经成功完成了Android项目的实现,并开始测试该应用程序的内存泄漏。

有时候,我在应用程序中旅行了一段时间后得到了DeadObjectException,并且所有的内存分配都已释放。

我如何发现此问题?

我已经对用于检测内存泄漏的DDMS工具进行了一些研究,由于我对DeadObjectExeption一无所知,所以我不知道从哪里开始。

android memory-leaks ddms
2个回答
31
投票

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

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

这里,您遇到了相反的情况-内存应该在释放之前就释放了(至少从程序的角度来看)。

来自developer.android.com:

DeadObjectException扩展了RemoteException

您正在调用的对象已死亡,因为它的托管进程已不存在。

例如:

您具有MyActivityMyService类。您可以使用Handler / Messenger在它们之间进行通信。

您在Handler中创建MessengerMyActivity,然后通过Messenger将创建的MyService实例发送到Intent。然后,您做一些事情,时间流逝,MyActivityHandlerMessenger一起被破坏。现在,如果您处理得不好,MyService将不知道他拥有的Messenger不再有效,因此,他尝试通过它发送一些东西,并获得DeadObjectexception

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

参数:

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

投掷:

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

公共无效send(消息)引发RemoteException {...}


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.