我正在与Android中的已知错误作斗争,因为无法解除阻止的USB读取线程 - 句号。什么都没有阻止它;没有关闭底层对象(就像套接字一样),不使用NIO并调用FileChannel.close(它向被阻塞的线程发送异常),什么都没有。所以我很难制定一些容忍Android中这个错误的解决方法。
最大的问题是,由于线程不会死,它会保留对底层FileInputStream对象(或FileChannel对象,或者您正在使用的任何对象)的引用。由于该对象仍然存在,因此无法与连接的USB设备重新关联。你得到了众所周知的“无法打开/ dev / usb_accessory”的绝望信息。
所以...因为线程不能被外部杀死或中断,并且因为它不会自行唤醒以释放对象,所以我想知道何时清除这样一个被阻塞的线程及其关联资源操作系统。在大多数操作系统中,线程将成为整个过程的一部分,当该过程终止时,所有线程和对象将同时被清除 - 从而最终释放USB连接,以便其他东西可以与之关联。但是实验表明,线程或对象可能存在于进程之外。如何,以及在什么情况下,我不知道,但到目前为止,我仍然得到“无法打开/ dev / usb_accessory”消息,即使在前一个进程终止后(!?!)。
那么......什么最终清理与进程相关的所有,包括它的所有线程和实例化对象?我如何“清理平板”,以便新进程与/ dev / usb_accessory相关联?
谢谢!