最近、私は時間のかかる操作をどのように扱うか、ハンドラののhandleMessage()関数で問題が発生しました。
最初からアイデアは、それ自体にメッセージを実行する前に、ワーカースレッド、時間のかかる操作を開くためのhandleMessage()関数にありました。このアプローチは、効率、あるいは不正確なデータに影響を与え、あまりにも多くのスレッドをもたらすことができます。
ハンドラのコンストラクタが深い理解はないので、このようなミスを犯す、通常最も使用される非引数コンストラクタハンドラハンドラ=新しいハンドラ()であり、そのようなハンドラを構築し、UIスレッドの接着され、のhandleMessageので、 ()関数は、時間のかかる操作ではありません。
しかし、他のコンストラクタハンドラ、例えばハンドラハンドラ=新しいハンドラ(ルーパー)があり、スレッドルーパーのパラメータに依存したスレッドで実行されるハンドラを作成するためにコンストラクタを使用します。パラメータルーパーワーカースレッドが実行している場合は、ワーカースレッドが時間のかかる直接操作をすることができ、そののhandleMessage()関数の中で、ハンドラを結合しました。
したがって、上記の問題を解決するために、初期化ハンドラ、ルーパー受信ワーカースレッドを介してであってもよいです。
ルーパーのワーカースレッドボンディングを取得するには?
Androidのは、私たちは、この問題を解決できるようにHandlerThreadクラスを提供します。
擬似コード:
HThread =新しい新HandlerThread HandlerThread(「myThreadを」); // myThreadと呼ばれるワーカースレッドを作成し、スレッドは任意の名前を変更することができ
hThread.start(); //ワーカースレッドを起動し、この手順を実行する必要があります
=新しい新しいハンドラハンドラハンドラ(hThread.getLooper()){ //ハンドラはスレッド結合で動作します
公共のボイドのhandleMessage(メッセージmsg){
........................... //この関数は、問題を解決するために、直接操作を消費し実行することができます。
}
}。
要約:
ハンドラは、一般的に、クラスの開発に使用されているが、多くの場合、より一般的なものより簡単に、おそらくより多くの仕事の雑用ので、それは他のがあるので、あまり時間はなじみのないコンテンツを学習すること、または認識源であるだろうことがあり、その実装の原則を見落とすこと十分に知っています。
学習にはショートカット、徹底的に進行するためには、学ぶことが知られ、未知の行くを理解するためにステップバイステップだけではありません。