我正在开发一个导致操作系统冻结的 Android 应用程序。
我的问题相当简单,但经过长时间的搜索,我还没有找到答案。
问题是,沙盒化的应用程序如何导致整个 Android 操作系统(4.0.4、4.1.1、4.1.2)冻结?
具体来说,整个操作系统冻结。没有 logcat,没有 adb,什么都没有!它与操作系统一样被冻结。该设备是三星 Galaxy Tab 2。该应用程序使用UsbManager
来自usb-serial-for-android 项目的库。虽然库可能使用 NDK,但我的应用程序没有。本质上,该应用程序与专用板进行串行通信,接收数据并发送串行命令。这是在以这种方式处理的工作线程上完成的:
try {
thread.interrupt();
thread.join();
while(thread.getState() != Thread.State.TERMINATED){
// wait until thread finishes
}
} catch (InterruptedException e) {
e.printStackTrace();
}
一切正常,直到发生冻结 - 当我断开 USB 电缆或指示库对象断开连接时。无论哪种方式,整个操作系统都会变得不稳定,并会立即冻结或在再次连接 USB(板或计算机)时冻结。我已将此冻结问题发布到 usb-serial-for-android 项目,但尚未收到任何评论。我相信我在断开 USB 时遵循了正确的协议。
我知道很多事情都可能出错 - 我的应用程序可能会崩溃等。人。但是,沙盒应用程序又是如何使操作系统崩溃的——如果它可以做到这一点,它似乎并不是很沙盒。
更新
经过大量实验后,我发现通过删除thread.interrupt();
它可以在不崩溃应用程序或冻结操作系统的情况下工作的行。如果在没有先卸下 USB 的情况下拔下 USB,它仍然会冻结操作系统。
我仍然想了解沙盒应用程序如何冻结整个操作系统。这里有一些评论无法回答,但不仅仅是答案。