Java.lang.RuntimeException: No se han podido leer los descriptores de los archivos del canal de entrada desde el paquete

Estoy usando crashlytics para rastrear el accidente de mi aplicación. Hay un error que es bastante difícil de averiguar. La traza de pila de crashlytics es la siguiente:

java.lang.RuntimeException: Could not read input channel file descriptors from parcel. at android.view.InputChannel.nativeReadFromParcel(InputChannel.java) at android.view.InputChannel.readFromParcel(InputChannel.java:148) at android.view.InputChannel$1.createFromParcel(InputChannel.java:39) at android.view.InputChannel$1.createFromParcel(InputChannel.java:36) at com.android.internal.view.InputBindResult.<init>(InputBindResult.java:62) at com.android.internal.view.InputBindResult$1.createFromParcel(InputBindResult.java:102) at com.android.internal.view.InputBindResult$1.createFromParcel(InputBindResult.java:99) at com.android.internal.view.IInputMethodManager$Stub$Proxy.windowGainedFocus(IInputMethodManager.java:851) at android.view.inputmethod.InputMethodManager.startInputInner(InputMethodManager.java:1292) at android.view.inputmethod.InputMethodManager.onWindowFocus(InputMethodManager.java:1518) at android.view.ViewRootImpl$ViewRootHandler.handleMessage(ViewRootImpl.java:3550) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:157) at android.app.ActivityThread.main(ActivityThread.java:5293) at java.lang.reflect.Method.invokeNative(Method.java) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081) at dalvik.system.NativeStart.main(NativeStart.java) 

Sé que hay una pregunta similar sobre esto aquí . Pero hay un poco diferente. Y como estadísticas de crashlytics, el accidente ocurre principalmente en el teléfono Android de SAMSUNG.

Soy nuevo en android y no sé por qué ocurrió el accidente y cómo solucionar este tipo de bloqueo.

Cualquier sugerencia sería muy apreciada.

Creo que es un área muy amplia y podría haber un montón de situaciones que pueden desencadenar esta excepción a nivel de sistema. Pero tal vez este ejemplo de cómo se fijó en un proyecto en particular puede ayudar a alguien.

He experimentado una excepción similar:
"Could not read input channel file descriptors from parcel" en el teléfono Samsung:

 java.lang.RuntimeException: Could not read input channel file descriptors from parcel. at android.view.InputChannel.nativeReadFromParcel(Native Method) at android.view.InputChannel.readFromParcel(InputChannel.java:148) at android.view.IWindowSession$Stub$Proxy.addToDisplay(IWindowSession.java:690) at android.view.ViewRootImpl.setView(ViewRootImpl.java:525) at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:269) at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69) at android.widget.Toast$TN.handleShow(Toast.java:402) at android.widget.Toast$TN$1.run(Toast.java:310) at android.os.Handler.handleCallback(Handler.java:730) at android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:5103) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:525) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) at dalvik.system.NativeStart.main(Native Method) 

Sucedió en un proyecto viejo grande que conseguí para el mantenimiento y este error flotante ocurrió solamente después de varias horas. Pasé bastante tiempo en él y también leer algunas respuestas relacionadas con SO en relación con él y no tenía ni idea, salvo que es un error de nivel de sistema de Android, y debe haber algunos datos adicionales o duplicados de objetos o objetos grandes en la memoria, etc:

https://code.google.com/p/android/issues/detail?id=32470

Lo último que podía pensar era SoundPool. No se utiliza mucho en el proyecto – no hay más de 10 sonidos diferentes reproducidos de vez en cuando.
¡Pero fue la causa raíz! A veces hay excepciones flotantes de SoundPool "unable to load sample (null)" . Y ayudó a darse cuenta de que SoundPool se usó de manera incorrecta:

 public void play(int rscId) { ... final int soundId = soundPool.load(mContext, rscId, 1); ... soundPool.play(soundId, volume, volume, 5, 0, 1f); 

Así que se generó nuevo id y se recargó el recurso de sonido cada vez que la aplicación llamada método de sonido de juego! Y después de cierto tiempo algunas excepciones no relacionadas comenzaron a ocurrir hasta que la aplicación se estrelló con la excepción "Could not read input channel file descriptors from parcel" .
Es interesante que una de esas excepciones no relacionadas fue:
"ExceptionHandled in unable to open database file (code 14)" :

 ExceptionHandled in unable to open database file (code 14) android.database.sqlite.SQLiteCantOpenDatabaseException: unable to open database file (code 14) at android.database.sqlite.SQLiteConnection.nativeExecuteForCursorWindow (Native Method) at android.database.sqlite.SQLiteConnection.executeForCursorWindow (SQLiteConnection.java:845) 

Y por supuesto no tiene nada que ver ni con base de datos ni con tostadas / paquetes. La solución para esa situación en particular fue muy fácil: solo precarga todos los sonidos como se sugiere en la documentación de Android:

http://developer.android.com/reference/android/media/SoundPool.html

"La lógica de carga itera a través de la lista de sonidos que llaman a la función apropiada de SoundPool.load() function Esto normalmente debería hacerse temprano en el proceso para permitir tiempo para descomprimir el audio al formato PCM crudo antes de que sean necesarios para la reproducción.
Una vez que los sonidos se cargan y el juego ha comenzado, la aplicación puede disparar sonidos llamando SoundPool.play() . "

Así que me movió soundPool.load() out from play() method y la excepción:
"Could not read input channel file descriptors from parcel" ha ido así como la excepción "unable to open database file (code 14)" .

 public void play(int soundId) { ... soundPool.play(soundId, volume, volume, 5, 0, 1f); 

Y soundPool.release(); soundPool = null soundPool.release(); soundPool = null debe ser llamado también cuando ya no es necesario. Y tal vez también puede tener un efecto en tales excepciones, ver detalles aquí

No se han podido leer los descriptores de los archivos del canal de entrada desde el paquete

Lo más probable es que no es la situación exacta para la pregunta original, pero espero que pueda dar alguna información para profundizar más. Es decir, buscando algunas excepciones adicionales, excepciones tragados o manipulación incorrecta de archivos / datos.

Estoy buscando la respuesta durante mucho tiempo, como los otros que se enfrentan a esta excepción.

Como yo lo veo, este accidente también puede ser activado por el TextView o EditText no EditText que funciona con el InputMethodManager :

 java.lang.RuntimeException: Could not read input channel file descriptors from parcel. at android.view.InputChannel.nativeReadFromParcel(Native Method) at android.view.InputChannel.readFromParcel(InputChannel.java:148) at android.view.InputChannel$1.createFromParcel(InputChannel.java:39) at android.view.InputChannel$1.createFromParcel(InputChannel.java:36) at com.android.internal.view.InputBindResult.<init>(InputBindResult.java:68) at com.android.internal.view.InputBindResult$1.createFromParcel(InputBindResult.java:112) at com.android.internal.view.InputBindResult$1.createFromParcel(InputBindResult.java:109) at com.android.internal.view.IInputMethodManager$Stub$Proxy.startInput(IInputMethodManager.java:697) at android.view.inputmethod.InputMethodManager.startInputInner(InputMethodManager.java:1407) at android.view.inputmethod.InputMethodManager.checkFocus(InputMethodManager.java:1518) at android.view.inputmethod.InputMethodManager.restartInput(InputMethodManager.java:1286) at android.widget.TextView.setText(TextView.java:4718) at android.widget.TextView.setText(TextView.java:4656) at android.widget.TextView.append(TextView.java:4330) at android.widget.TextView.append(TextView.java:4320) ... 

Cuando TextView texto, hará que el texto sea Editable , e inicie InputMethodManager . Pero en este momento, algo va mal en el proceso InputMethod , y conduce a fallar al crear InputBindResult que error de lectura del paquete.

En este caso, la solución es muy simple: NO llame a append en textview directamente, utilice StringBuilder o SpannableStringBuilder para crear texto y, en su lugar, llame a TextView.setText(text) .

Los usuarios anteriores han comentado que esto puede ser un error difícil de rastrear. TextView esto mediante la creación de un cuadro de diálogo de alerta personalizado (que contiene varios objetos TextView ) dentro de un while loop vice una declaración if . La aplicación se bloqueó antes de mostrar el (los) cuadro (s) de diálogo.

Tengo este error debido a ejecutar demasiadas consultas en el lanzamiento de actividad (para cada fila en una vista de lista). Porque traté de reabrir la misma actividad mientras se ejecutaban las consultas.

Corrección: he ejecutado sólo una consulta para el listview.

  • Android Studio necesita JDK 7 para Android-L mac
  • ¿Hay alguna manera de comprobar si una variable está definida en Java?
  • Carga de Android desde la URL a Bitmap
  • Función nativa no se ha encontrado ninguna implementación
  • GetContext () no existe
  • Actividad se ha filtrado ventana com.android.internal.policy.impl.PhoneWindow$DecorView@46029dd0
  • Problema de liberación de Android MediaRecorder () y la captura de vídeo no está en modo retrato
  • StringBuilder perdió datos al convertir a String
  • ¿Cómo escuchar los eventos completos de carga de Picasso (Android)?
  • Cómo probar unidades de manejo de texto bidireccional
  • ¿Por qué mi implementación de pbkdf2 es tan lenta (vs. SQLCipher)?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.