AndroidのTaotaoベストハンドラのメカニズム

まず、基本的な概念のANRを理解する必要があります、つまり、ことわざがクラッシュ行く応答していないアプリケーションではない応答アプリケーションを。

その理由ANRは以下のとおりです。

メインスレッドは、重要なことの多くを行うUIを更新し、イベントをクリックして応答する必要がある
アプリケーションが応答していない時、メインスレッドで長時間ブロックされている場合。

アプリケーションを避けるために表示されANR、すべての時間のかかる操作は、サブスレッドの実行中に配置する必要があります。ネットワークへのアクセスとして動作のみ子スレッド内で行うことができます


解決策:
メインスレッドの実行---->は、オブジェクトハンドラ、メッセージキューを配置するメッセージキュー、ルーパーは、メッセージキューが保持されて表示が含ま
中利きハンドラがある場合、かどうかを処理するメッセージに要求を処理するためのhandleMessage方法。
子スレッド--->メインスレッドにリクエストを送信します> ---メインUIスレッドを変更するためのリソースを取得します。
その後:ハンドラはメインスレッドで呼び出されるクラスを有し、サブスレッドを変更する要求を処理するメッセージ処理は、UIを送ります。
要約:
1.サブスレッドの使用は、メインスレッドのメッセージキューに置かれるメッセージハンドラ要求を送信します。//メッセージキューはFIFOキューです。
2.メインスレッドでルーパーメッセージのポーリングがあり、パトロールの同等は、メッセージのメッセージキューがリクエスト処理されるかどうかを確認するために停止
ルーパーが新しいメッセージを発見した場合は3、それはメソッドのhandleMessage呼び出しますメッセージを処理します。唯一のメインスレッドがビューオブジェクトを変更できることに注意してください。

次のようにハンドラの処理フローは以下のとおりです。

//コーディング手順:
1.メッセージ処理メインスレッド作成
スレッドは、サブメインスレッドにメッセージを送信2.
方法はルーパのhandleMessageと呼ばれるプロセスメッセージの後に得られる3。
ハンドラハンドラハンドラ=新しい新)(プライベート、
パブリックボイドのhandleMessage(メッセージMSG){
IF {(== 123 msg.what)
ビットマップビットマップ=(ビットマップ)msg.obj;
iv.setImageBitmap(ビットマップ); // IVベースのインタフェースImageViewの。
}


}
//これは、メインスレッドの子スレッドは、メッセージを送る
、メッセージMSG =新しい新しい()メッセージ
msg.what = 123;
msg.obj =ビットマップは、
handler.sendMessage(MSG)。

//注意:ディスプレイの内容は、それはまた、ハンドラ・プロセスが必要とされ、トースト更新UI操作の中にもあります。

おすすめ

転載: www.cnblogs.com/Jeely/p/10949314.html