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

29
我在Android平台上运行测试时遇到了错误:
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:803)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:570)
at dalvik.system.NativeStart.main(Native Method)

我不确定,但我认为这可能是Android平台上的错误?你认为可能是什么原因?


5
这次事故的原因不明确,我们应该允许对此进行讨论。 - Siddharth
8
这是Android系统中的一个漏洞:https://code.google.com/p/android/issues/detail?id=32470 - pixel
5
这个问题应该是开放的。 - neferpitou
2个回答

4

有时候我打开、退出并重新打开一个应用程序时会出现这种情况。我的问题是我忘记在SoundManager上运行清理操作:

public static void cleanup() {
     mSoundPool.release();
     mSoundPool = null;
     mSoundPoolMap.clear();
    mAudioManager.unloadSoundEffects();
    _instance = null;
}

您可能仍然在内存中运行了某些已经运行了两次的内容。


2

这个异常可能是因为从文件描述符读取数据的进程与通过另一个进程打开该文件的进程不同。如果不同的进程尝试读取属于另一个进程的文件描述符,则在读取时会抛出异常。


谢谢你的回答。如何确保它是从同一进程完成的? - Shobhit Puri
1
实际上,除非您是唯一执行所有文件操作(从打开到读取数据)的人,否则没有确定的方法可以确保。在第一次打开文件时,您需要维护进程ID,并在读取时获取当前运行的进程,然后进行交叉检查。 - Nikhil Moharkar

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