OS がフリーズする Android アプリを開発しています。
私の質問はかなり単純ですが、長い検索の後、私は答えに近づきませんでした.
問題は、サンドボックス化されたアプリがどのようにして Android OS 全体 (4.0.4、4.1.1、4.1.2) をフリーズさせるのかということです。
具体的には、OS 全体がフリーズします。logcat も、adb も、何もありません。OSができる限り凍結されています。デバイスは Samsung Galaxy Tab 2 です。このアプリは、 usb-serial-for-android プロジェクトのUsbManager
とライブラリを使用します。ライブラリは NDK を使用する場合がありますが、私のアプリは使用しません。基本的に、アプリは適切なボードとシリアル通信し、データを受信してシリアル コマンドを送信します。これは、次の方法で破棄されるワーカー スレッドで行われます。
try {
thread.interrupt();
thread.join();
while(thread.getState() != Thread.State.TERMINATED){
// wait until thread finishes
}
} catch (InterruptedException e) {
e.printStackTrace();
}
フリーズが発生するまで、つまりUSBケーブルを切断するか、ライブラリオブジェクトに切断を指示するまで、すべて正常に動作します。いずれにせよ、OS 全体が不安定になり、すぐにフリーズするか、または USB (ボードまたはコンピューター) を再接続するとフリーズします。このフリーズの問題を usb-serial-for-android プロジェクトに投稿しましたが、まだコメントを受け取っていません。USBを外すときは、適切なプロトコルに従っていると思います。
多くのことがうまくいかない可能性があることを理解しています-アプリがクラッシュする可能性があります. アル。しかし、サンドボックス化されたアプリはどのように OS をクラッシュさせるのでしょうか。
アップデート
多くの実験の結果、thread.interrupt();
行を削除することで、アプリをクラッシュさせたり、OS をフリーズさせたりすることなく機能することがわかりました。最初にマウントを解除せずに USB を取り外すと、OS がフリーズします。
ただし、サンドボックス化されたアプリが OS 全体をフリーズさせる方法を理解したいと思っています。ここには回答に至らないコメントがありますが、回答だけではありません。