Androidハンドラーメカニズムを学習した後、疑問が生じます。なぜLooper.loop()がメインスレッドで無限ループを実行しましたが、ANRを引き起こさなかったのですか?
まず、ANRの異常はどのような状況で発生しますか?
1.イベントは処理されていません
2.イベントは処理されていますが時間内に完了していません
例:
アクティビティ応答が5秒
を超えているBroadcastReceiver応答が10秒
を超えているサービス応答が20秒を超えています
説明:
このメッセージループで実行されている
Androidはイベントによって駆動されるというアプリケーションのライフサイクル全体であるため、 Looper.loopメソッドは継続的にイベントを受け入れて処理します。各ライフサイクルのクリック、タッチ、またはアクティビティの呼び出しはすべてLooperで行われます。 .loopメソッドの制御下で、Looper.loopメソッドが終了すると、アプリケーションのライフサイクルが終了します。
ActivityThreadの主な方法は、アプリケーションを開いた後も実行を継続できるようにメッセージループを生成することです。メッセージループが終了すると、アプリケーションは終了します。処理するキューにイベントがない場合、メインスレッドのLooper.loopメソッドによってメインスレッドがブロックされることがありますが、メッセージループがブロックされていない限り、イベントは常に処理され、ANR例外は生成されません。