デバッガーが接続されていないデバイス上で完全に動作するアプリがあります。ただし、Eclipseでデバッグするときに問題があります。
メインスレッドが約10秒以上(たとえば、ブレークポイントにヒットした後)中断された場合、メインスレッドはlibcからのSIGABRTをスローします。
考えられる唯一の説明は、メインスレッドのメッセージキューが、ポーリングされていないときに、別のスレッドからのメッセージであふれているということです。ただし、メインスレッドが中断されたときにヒープが増加することはありません。さらに、私のアプリには、すべてのサービス、コンテンツプロバイダー、ブロードキャストレシーバー、httpおよびマップワーカースレッドなどの間に約20のスレッドがありますが、過剰なメッセージの送信元を考えることはできません。
私の質問は次のとおりです。この問題を修正するにはどうすればよいですか?どのツールを使用できますか?また、デバッガーで中断された状態でアプリがクラッシュする原因を見つけるにはどうすればよいですか?
編集1:
Logcatで唯一のものは:
02-05 22:23:54.861: I/dalvikvm(26795): threadid=3: reacting to signal 3
02-05 22:23:54.901: D/dalvikvm(26795): threadid=1: still suspended after undo (sc=1 dc=1)
02-05 22:23:54.901: I/dalvikvm(26795): Wrote stack traces to '/data/anr/traces.txt'
02-05 22:23:58.905: A/libc(26795): Fatal signal 6 (SIGABRT) at 0x000002f5 (code=0), thread 26795 (om.myapp)
編集2:
さらなる調査により、Android UIスレッドがハングしていると誤って判断したため、意図的にプロセスを強制終了しています。問題はアプリにありません。今、私の質問は次のとおりです。 Androidデバッグ中にプロセスを強制終了しますか?
AndroidはUIスレッドがハングしていると考えているため、意図的にプロセスを強制終了します。デバッグのために次のことができます。
[設定]-> [開発者オプション]に移動し、[すべてのANRを表示]をオンにします。
これにより、バックグラウンドで実行されているアプリの[アプリが応答していません]ダイアログが表示されます。ダイアログの「待機」ボタンをクリックして、デバッガーが接続されるまでシステムがプロセスを強制終了しないようにすることができます。フォアグラウンドで実行されているアプリの場合、ダイアログが自動的に開かれることに注意してください。バックグラウンドアプリの場合、このオプションを有効にする必要があります
これはAndroid 7.1.1で私に起こり始めました
デバッガをアタッチすると、デバッグモードでアプリを起動したときと同じように、アプリが常にクラッシュしました。
私のためにそれを修正したのは単純です:
私は同様の問題を抱えていましたが、サムが示唆したことは助けになりませんでした-実際にブレークポイントを削除しなければならなかったので、それは私のために働きました。
再インストールする必要がありましたAndroidスタジオ1回、それが起こった2回目は、自分自身で消えた