java – android错误:无法从parcel读取输入通道文件描述符

我已经为 Android创建了一个或多或少类似的应用程序:

>应用程序与Web服务通信并传输信息(而不是文件)
>我可以使用Intent和startActivity导航到不同的屏幕

不幸的是,有时应用程序在不同的活动中崩溃并出现以下错误:

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:135)  
at android.view.IWindowSession$Stub$Proxy.add(IWindowSession.java:523)  
at android.view.ViewRootImpl.setView(ViewRootImpl.java:481)  
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:301)  
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:215)  
at android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:140)  
at android.view.Window$LocalWindowManager.addView(Window.java:537)  
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2507)  
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1986)  
at android.app.ActivityThread.access$600(ActivityThread.java:123)  
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)  
at android.os.Handler.dispatchMessage(Handler.java:99)  
at android.os.Looper.loop(Looper.java:137)  
at android.app.ActivityThread.main(ActivityThread.java:4424)  
at java.lang.reflect.Method.invokeNative(Native Method)  
at java.lang.reflect.Method.invoke(Method.java:511)  
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)  
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)  
at dalvik.system.NativeStart.main(Native Method)

但我不知道这个错误是什么意思,因为我不使用文件.任何的想法?

解决方法

此问题似乎与 Could not read input channel file descriptors from parcel相同,后者(错误地)关闭为非主题.它与 Could not read input channel file descriptors from parcel crash report或多或少相同.不幸的是,这些问题没有得到令人满意的(并且足够普遍)的答案,所以无论如何我都要尝试.

文件描述符在Android中的多个位置使用:

>套接字(是的,开放的网络连接也是“文件”);
>实际文件(不一定是磁盘上的文件,也可能是android.os.MemoryFile实例);
> Pipes-Linux在任何地方都使用它们,例如,导致异常的尝试打开管道,可能需要在IME(键盘)进程和您的应用程序之间发送输入事件.

所有描述符均以shared maximum limit为准;当超过该数量时,您的应用程序开始遇到严重问题.在这种情况下,使进程死亡是最佳方案,因为否则内核将耗尽内存(文件描述符存储在内核内存中).

您可能会遇到没有关闭描述符(文件,网络连接)的问题.你必须尽快关闭它们.您可能还遇到内存泄漏问题 – 对象在应该进行垃圾收集时(而某些泄漏的对象可能会依次保留在文件描述符上).

您自己的代码不必是有罪的,您使用的库甚至一些系统组件可能有错误,导致内存泄漏和文件描述符泄漏.我建议你使用Square’s Leak Canary-一个简单易用的库来自动检测泄漏(好吧,至少是内存泄漏,这是最常见的).

以上是来客网为你收集整理的java – android错误:无法从parcel读取输入通道文件描述符全部内容,希望文章能够帮你解决java – android错误:无法从parcel读取输入通道文件描述符所遇到的程序开发问题。

如果觉得来客网网站内容还不错,欢迎将来客网网站推荐给程序员好友。