2

コードで多くの例を目にすると、次のことがわかります。

HandlerThread thread = new HandlerThread("Thread1");
        thread.start();
        mLoadHandler = new Handler(thread.getLooper())


   mLoadHandler.post(new Runnable() {
            public void run() {
                // run some code
                //methodA();
            }
        });

次の場所でも見つけることができます。

https://github.com/android/platform_packages_apps_browser/blob/master/src/com/android/browser/OpenDownloadReceiver.java

https://github.com/CyanogenMod/android_packages_apps_Gallery3D/blob/8621799408a58f6b9da3492382ce929b3c93c7de/src/com/cooliris/picasa/PicasaService.java

を作成するHandlerThread目的は 1 つだけです: それLooperを newに渡すためHandlerです。HandlerThreadを拡張して、そこですべてのコード ( methodA())を実行しないのはなぜですか? または Handler インスタンスを作成し、そこに呼び出します:

 Looper.prepare();
 Looper.loop();
4

2 に答える 2

0

作成した ThreadHandler クラスに関連付けられた Handler を取得する場合は、その ThreadHadler に関連付けられた Looper を渡す必要があります。そうしないと、Handler はインスタンス化された現在のスレッドに関連付けられます。このような HandlerThread を作成する目的は、通常、同じタイプのジョブを複数回実行する場合です。この Handler オブジェクトを使用して、新しいスレッドにメッセージをポストするだけです。

あなたの質問は、別の独立したクラスを実装するのではなく、内部クラスを作成したい理由だと思います。内部クラスを作成している場合は、それを含むクラスのメンバーに直接アクセスできます。別のクラスを実装する場合は、必要な変数/ビューの値を新しいクラスに渡す必要があります。

于 2016-02-20T05:31:18.340 に答える
0

あなたが示すコードだけでは、どちらの方法でも HandlerThread を処理することに大きな違いはありません。

ただし、さまざまな Runnables を同じスレッドに投稿しようとするさまざまなコンポーネントが多数ある場合は、それらのすべてのロジックを 1 つのクラスに詰め込みたくはありません。この場合、これらの異なるコンポーネントが共有できるように Handler を渡す方が簡単です。これは 1 つのシナリオですが、他にもある可能性があります。

于 2016-02-20T05:00:18.643 に答える