首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >DeadObjectException与导致NullPointerException之间的差异

DeadObjectException与导致NullPointerException之间的差异
EN

Stack Overflow用户
提问于 2015-08-21 16:59:02
回答 3查看 492关注 0票数 8

DeadObjectExceptionNullPointerException有什么区别?我想我可能理解,但我只是想确定。

我的理解

当您试图引用某个内容(内存仍然存在)时,DeadObjectException就会发生,但是没有任何指针保存它的地址,因此无法到达该内存。与NullPointerException不同的是,内存仍然有效,只是无法到达它。

我有正确的想法吗?根据网站上的其他问题:

我认为我的说法是正确的,我只是想确定。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-08-21 18:01:53

远程对象(例如,IBinder)是绑定到可以处于另一个进程中的对象的对象。

当您在它上调用方法时,它充当另一个对象的代理。(而不是直接调用方法,而是要求代理传递您的意图并为您检索结果。)

当远程对象断开连接时,代理将无法到达该对象,但代理对象仍然是本地存在的。

您持有的实例仍然存在(因此,不存在NPE。只要您对实例有一个引用,它就不会消失。不可能持有引用并看到实例消失(某些对象将允许类似的行为,如WeakReference),因此您永远无法获得和NPE)。

然而,它指的是不再是这样的东西。从原则上讲,NPE类似于NPE,但它的水平要高得多(并且纠缠在android操作系统中,以及它处理进程间通信的方式)。

NPE是当你这样做时发生的事情

代码语言:javascript
运行
复制
MyObject foo = null;
foo.something();

foo不是一个对象,而是一个空引用。

票数 -2
EN

Stack Overflow用户

发布于 2015-08-21 18:36:26

NullPointerException是指引用没有指向同一个虚拟机中的任何对象的情况。

DeadObjectException是指当您调用一个不再存在的远程对象时。这种情况发生在两个不同的JVM上。

票数 1
EN

Stack Overflow用户

发布于 2015-08-21 18:01:42

NullPointerException -当程序试图访问对象的字段或方法或数组的元素时,如果没有对象或数组的实例可使用,则会引发这种情况。android.os.DeadObjectException -来自developer.android.com:在扩展RemoteException时,您正在调用的对象已经死亡,因为它的宿主进程不再存在。

例如:复制:)这是一个很好的例子,可以很好地理解它。

您有MyActivity和MyService类。您可以使用Handler/Messenger在它们之间进行通信。您可以在MyActivity中创建Handler和Messenger,然后通过意图将已创建的Messenger实例发送到MyService。然后,你做一些事情,时间流逝,你的MyActivity被摧毁,连同它的处理程序和信使。现在,如果您不能很好地处理这个问题,MyService将不会知道他拥有的Messenger不再有效,因此,他试图通过它发送一些东西,并获得DeadObjectexception:

/*向这个信使的处理器发送一条消息。

参数:向要发送的消息发送消息。通常通过Message.obtain()检索。抛出:如果目标处理程序不再存在,RemoteException抛出DeadObjectException。*/

公共空发送(消息消息)抛出RemoteException {.}

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32145715

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档