DeadObjectException
和NullPointerException
有什么区别?我想我可能理解,但我只是想确定。
我的理解
当您试图引用某个内容(内存仍然存在)时,DeadObjectException
就会发生,但是没有任何指针保存它的地址,因此无法到达该内存。与NullPointerException
不同的是,内存仍然有效,只是无法到达它。
我有正确的想法吗?根据网站上的其他问题:
我认为我的说法是正确的,我只是想确定。
发布于 2015-08-21 10:01:53
远程对象(例如,IBinder
)是绑定到可以处于另一个进程中的对象的对象。
当您在它上调用方法时,它充当另一个对象的代理。(而不是直接调用方法,而是要求代理传递您的意图并为您检索结果。)
当远程对象断开连接时,代理将无法到达该对象,但代理对象仍然是本地存在的。
您持有的实例仍然存在(因此,不存在NPE。只要您对实例有一个引用,它就不会消失。不可能持有引用并看到实例消失(某些对象将允许类似的行为,如WeakReference),因此您永远无法获得和NPE)。
然而,它指的是不再是这样的东西。从原则上讲,NPE类似于NPE,但它的水平要高得多(并且纠缠在android操作系统中,以及它处理进程间通信的方式)。
NPE是当你这样做时发生的事情
MyObject foo = null;
foo.something();
foo
不是一个对象,而是一个空引用。
发布于 2015-08-21 10:36:26
NullPointerException是指引用没有指向同一个虚拟机中的任何对象的情况。
DeadObjectException是指当您调用一个不再存在的远程对象时。这种情况发生在两个不同的JVM上。
发布于 2015-08-21 10: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 {.}
https://stackoverflow.com/questions/32145715
复制相似问题