无法从包崩溃报告中读取输入通道文件描述符

4
我收到了来自我的安卓应用的不断崩溃报告:

我不断收到这个安卓应用的崩溃报告:

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: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.startInput(IInputMethodManager.java:709)
at android.view.inputmethod.InputMethodManager.startInputInner(InputMethodManager.java:1296)
at android.view.inputmethod.InputMethodManager.checkFocus(InputMethodManager.java:1418)
at android.view.ViewRootImpl$ViewRootHandler.handleMessage(ViewRootImpl.java:3648)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:157)
at android.app.ActivityThread.main(ActivityThread.java:5356)
at java.lang.reflect.Method.invokeNative(Native Method)
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(Native Method)

我不明白这是什么错误?可能是什么原因导致的?
1个回答

11
我曾经遇到同样的错误。在清理了所有内存泄漏后,它完全消失了。同时,java.lang.IllegalStateException: eglMakeCurrent failed EGL_BAD_ALLOC也消失了。Java中的内存泄漏意味着垃圾回收器无法清理对象——存在一些交叉引用。我知道有一些常见的原因:
  1. 某些复杂结构的未清除的类对象(例如具有父子交叉引用的树)。因此,在使用后,您应该调用 closedestroy 或其他一些方法。

  2. 在 Activity 类中的非静态内部(匿名)类 - 据我所知,内部类始终包含对其父类的引用,因此在完成 Activity 后,内部类的引用仍然存在,垃圾回收无法清除它们。如果您需要在 Activity 中使用它,请始终创建静态类(当您想要使用对 YourActivity 对象的引用时,请使用 WeakReference <YourActivty> - 这对于垃圾回收和内存泄漏没有意义,但您应始终检查 weakReference.get() != null)。

  3. 在 Activity 类字段中引用内部 View。最好不要使用它们,并始终从 findViewByID 获取引用,但是您可以在 onDestroy() 方法中将所有这些字段设置为 null。

为了搜索一些泄漏,我在 Eclipse 中使用了 Memory Analysis 视角。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接