1.サービスANR
原因: メイン スレッドは、指定された時間 (フォアグラウンドで 20 秒、バックグラウンドで 200 秒) 内にサービスの各ライフサイクル関数の実行を完了しませんでした。
プロンプト: 理由: 実行中のサービス + パッケージ名
サービス ANR トリガー プロセス:
サービスのタイムアウトを検出する方法:
ここでは、タイムアウト メッセージが最初に送信されます。サービス タスクがしきい値の時間範囲内に完了すると、serviceDoneExecuting が呼び出されてメッセージが削除されます。それ以外の場合は、ANR プロセスがトリガーされます。
2.ブロードキャストANR
原因: メイン スレッドは指定された時間 (フォアグラウンドで 10 秒、バックグラウンドで 60 秒) 内に BroadcastReceiver の onReceive 関数の実行を終了しませんでした。
Prompt : Reason: Broadcast of Intent { act=XXX flg=XXX cmp=XXX }
ブロードキャスト ANR トリガー プロセス:
ブロードキャスト タイムアウトを検出する方法:
三、ContentProvider ANR
原因: メイン スレッドは、指定された時間 (10 秒) 内に ContentProvider 関連の操作の実行を終了しませんでした。
プロンプト: 理由: コンテンツ プロバイダーの公開がタイムアウトしました (ANR の箇条書きボックスは報告されません)。
ContentProvider ANR トリガー プロセス:
ContentProvider タイムアウトを検出する方法:
4.入力ANR
原因: メイン スレッドが指定された時間 (5S) 内に現在の入力イベントの処理を完了せず、次の入力時間が来て、処理が完了するのを待っています (次の入力がない場合、タイムアウトは発生しません)。
プロンプト: 理由: 入力ディスパッチがタイムアウトしました (理由には多くの理由があります)
最後に、ANR の実行を見てみましょう。
Input を含むこれまでの主要なコンポーネントは、最後にタイムアウト メッセージを送信し、一連の判断を経て、最終的に AppErrors の appNotResponding メソッドが呼び出され、ANR 処理が実行されます。
ここでは主に ANR 操作について説明します。主な内容は、メイン ログでの ANR 情報の収集、ダンプ操作の実行、DropBox の追加、ANR を促すポップアップ ウィンドウなどです。
転載:https://www.jianshu.com/p/fe7373d224ca