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.
- ¿Qué significa "servicio semipúblico" en Android?
- Recuperar android.os.Build ... propiedades del sistema mediante la aplicación puramente nativa de Android
- Android: Formato de cadena con doble valor
- Cómo utilizar multple @Path parámetro en GET de retrofit
- Obtenga los horarios de inicio y fin de Google Calendar Events con google-java-api-client en Android
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.
- Detectar encendido / apagado de la tecla Pulse Android
- Google Maps de Google - Error al inflar el fragmento de clase
- ¿Qué hacer con nunca suceder, excepciones inútiles?
- No puede usar botones capacitivos mientras toca la pantalla
- Conexión de socket - Java añade bytes
- Cliente Android para servicio web REST con seguridad básica
- Cómo insertar% 20 en lugar de espacio en android
- Cómo puedo extraer datos rtsp en MediaCodec
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.
- ¿Alguien sabe lo que está causando "nombre del paquete no es un nombre de paquete válido" al agregar un nuevo diseño?
- Error al inflar el fragmento de clase – id / illegalargumentexception duplicado?