web-dev-qa-db-ja.com

不明なバグ「ランタイムシャットダウン中にスレッドが開始する」

アプリのクラッシュを報告するためにFabricを使用しています。私はそれらの報告を非常に長い間受け取り、クラッシュの数は増え続けています。

Fatal Exception: Java.lang.InternalError: Thread starting during runtime shutdown
   at Java.lang.Thread.nativeCreate(Thread.Java)
   at Java.lang.Thread.start(Thread.Java:730)
   at Java.util.concurrent.ThreadPoolExecutor.addWorker(ThreadPoolExecutor.Java:941)
   at Java.util.concurrent.ThreadPoolExecutor.processWorkerExit(ThreadPoolExecutor.Java:1009)
   at Java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.Java:1151)
   at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:607)
   at Java.lang.Thread.run(Thread.Java:761)

このレポートに添付されている62のスレッドのリストもあります。必要に応じて、ここに投稿できます。

コードのどの部分がこれを引き起こしているのか、またはバグを再現する方法がわかりません。ですから、このケースを見つけて解決するために私を導いていただければ幸いです。

11
Huy

私は同じ問題を抱えていました...

ファブリックプラグインを更新してから、TwitterSDKを更新しました。

次に、プロジェクトをクリーンアップして、apk..myエラーを再構築します。

一部のANRが発生しているときに、このエラーが発生したことがあります。

3
Naimatullah

現在のスレッドの開始が遅すぎます。つまり、UncaughtExceptionHandlerでキャッチされなかった例外を受信すると、子スレッドが開始されてエラーログがアップロードされます。 HttpClientはエラーログのアップロード時に作成されますが、ThreadSafeClientConnManagerは作成時に接続を管理するように設定されています。

ThreadSafeClientConnManagerのソースコードを見ると、ThreadSafeClientConnManagerも子スレッドを開いているため、子スレッドで子スレッドを開く問題が発生し、実行完了後にスレッドでuncaughtException()が発生することがわかりました。 Java.lang.InternalError:ランタイムシャットダウン中に開始するスレッドがスローされます。

この問題の解決策は:HttpClientの作成もスレッドを開始するため、事前にHttpClientを作成し、uncaughtException()での作成を回避して、スレッドでスレッドを開始する問題を回避します。

代替ソリューション:スレッドを作成しようとした場合に備えて、コードからUncaughtExceptionHandlerを削除します。

1
Whitebear