Diferencia entre DeadObjectException y causar una excepción NullPointerException

¿Cuál es la diferencia entre la DeadObjectException y una NullPointerException ? Creo que puedo entender, pero sólo quería estar seguro.


Mi entendimiento

Una DeadObjectException ocurre cuando se intenta hacer una referencia a algo (y la memoria sigue existiendo) pero no hay ningún puntero que contenga su dirección, por lo que no hay manera de alcanzar esa memoria. Es diferente de una NullPointerException en el hecho de que la memoria sigue siendo válida, no hay manera de alcanzarla.


¿Tengo la idea correcta? Basado en otras preguntas en el sitio:

  • Cuando android desvincular un servicio que creé
  • Fugas de memoria en Android

Creo que mi afirmación es correcta, sólo quería asegurarme.

Un objeto remoto (por ejemplo, un IBinder ) es un objeto que está atado a un objeto que puede estar en otro proceso.

Cuando llama a métodos en él, actúa como un proxy para ese otro objeto. (En lugar de llamar directamente a los métodos, pida que el proxy transmita su intención y obtenga el resultado para usted).

Cuando el objeto remoto se desconecta, el proxy ya no puede alcanzar el objeto, pero el objeto proxy sigue presente localmente.

La instancia que usted tiene todavía existe (por lo tanto, no es un NPE) Siempre y cuando usted tiene una referencia en la instancia, no puede desaparecer Es imposible mantener una referencia y ver desaparecer la instancia (algunos objetos permitirá un comportamiento similar, Tales como WeakReference), por lo que nunca podría obtener y NPE).

Sin embargo, se refiere a algo que ya no es. En principio se asemeja a la NPE, pero es mucho más alto nivel (y enredado en el sistema operativo Android y la forma en que maneja la comunicación entre procesos).

NPE es lo que sucede cuando lo hace

 MyObject foo = null; foo.something(); 

foo no es un objeto es una referencia nula.

NullPointerException es cuando una referencia no apunta a ningún objeto dentro de la misma máquina virtual Java .

DeadObjectException es cuando uno llama a un objeto remoto que ya no existe. Esto ocurre en 2 JVM diferentes.

NullPointerException – Se activa cuando un programa intenta acceder a un campo o método de un objeto o un elemento de una matriz cuando no hay ninguna instancia de un objeto o matriz que se va a utilizar. Android.os.DeadObjectException – De developer.android.com: Como se extiende RemoteException El objeto que está llamando ha muerto, porque su proceso de alojamiento ya no existe.

Por ejemplo: Copied 🙂 su buen ejemplo para entenderlo bien.

Tiene clases MyActivity y MyService. Utiliza Handler / Messenger para comunicarse entre ellos. Crea Handler y Messenger en MyActivity y, a continuación, envía instancia creada de Messenger a MyService a través de Intent. Entonces haces algunas cosas, el tiempo pasa, y tu MyActivity se destruye, junto con su Handler y Messenger. Ahora, si no manejas bien, MyService no sabrá que el Messenger que tiene ya no es válido, así que intenta enviar algo a través de él y obtiene DeadObjectexception:

/ * Enviar un mensaje a este manejador de Messenger.

Parámetros: message El mensaje a enviar. Se recupera generalmente a través de Message.obtain (). Throws: RemoteException lanza DeadObjectException si el controlador de destino ya no existe. * /

Public void send (Mensaje de mensaje) throws RemoteException {…}

  • Prueba de Realm bajo Android
  • ¿Cómo hacer http post usando apache httpclient con autenticación web?
  • Google mapa cuestión incluso todos los ajustes son correctos según google doc
  • Incapaz de referir proyecto de biblioteca android en adt actualizado
  • Vista borrosa transparente que difumina el diseño debajo
  • Cambiar la ruta del archivo de entrada de android y ios en el proyecto reactivo-nativo
  • ¿Cómo puedo corregir el error JDK no encontrado al crear una fuente de Android?
  • El diseño personalizado no detecta en la clase mainActivity?
  • GetClass () en la clase abstracta da la llamada de método ambiguo
  • Acceso a almacenamiento Web o IndexedDB desde fuera del navegador en Android
  • "Error de parámetro de línea de comandos no válido" al intentar hacer un ejemplo de mundo hola para Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.