Handlerthread使用

子スレッドとメインスレッド間の通信に関連した共通の更新UIのAndroidなどスレッド間通信は、実装はハンドラ+ルーパーですが、GoogleはHandlerThreadをカプセル化して、独自のマニュアルルーパーに、推奨されていない場合クラス(AsyncTaskクラスに似ています)。

サブハンドラ・スレッドにメッセージを送信するタスク、子スレッド・ハンドラの再利用HandlerThreadを実行する子スレッドは、メインスレッドの更新UIにメッセージを送ります 

パブリック クラス MainActivity 延びAppCompatActivity { 

    のTextViewのTextView、
    ボタンボタン、
    MainHandler MainHandlerと、
    保護された ボイドのonCreate(バンドルsavedInstanceState){
         スーパー.onCreate(savedInstanceState); 
        setContentView(R.layout.activity_main)
        のTextView = findViewById(R.id.text)。
        ボタン = findViewById(R.id.button);
         //は、これは彼女に新しいハンドラルーパーがない場合に渡された知識があれば、彼は現在実行中のデフォルトの連絡先のルーパ糸に行くと、メインスレッドハンドラのインスタンスである 
        mainHandler =を新しい新しい MainHandler(この);


        HandlerThread HandlerThread = 新新 HandlerThread( "第一" ); 
        handlerThread.startは(); 
        // これは、ハンドラの子供がルーパーhandlerThreadの着信リンクスレッドで
        決勝ハンドラchildHandler = 新しい新しいハンドラ(handlerThread.getLooper()){
             int型の COUNT = 0を; 

            @Override 
            公共 のボイドのhandleMessage(メッセージMSG){
                 スーパー.handleMessage(MSG); 
                System.out.printlnはは( +「子スレッドハンドラは、現在の実行のメインスレッドにデータを送信するデータを受信した」。にThread.currentThread()のgetName( ));
                 // 彼女のハンドラのUI更新のメインスレッドにメッセージを送信
                Message.obtain(MainHandler ,. 1、++ COUNT).sendToTargetは(); 
            } 
        }; 


        // コール情報伝送のスレッドを開きchildHandler 
        button.setOnClickListener(新しい新しいView.OnClickListener(){ 
            @Override 
            公共 ボイドのonClick(ビューV) { 

                新しい新しいスレッド(新しい新しいRunnableを(){ 
                    @Override 
                    公共 ボイドRUN(){ 
                        System.out.printlnは( + "のデータ送信子スレッド" にThread.currentThread()のgetName())を;.
                         // ハンドラhandlerThreadに送信
                        childHandler.sendEmptyMessage(1 ); 
                    } 
                })スタート(); 
            } 
        }); 

    } 
        // これは、メモリリークを防止することができ、この形態のメインスレッドがハンドラを定義され
        たクラスを MainHandler 延びハンドラ{
             プライベート弱い参照<MainActivity> mainActivityWeakReferenceと、

            MainHandler(MainActivity MainActivity){ 
                この .mainActivityWeakReference = 新しい新しい弱い参照<> (MainActivity); 
            } 

            @Override 
            公共 ボイドのhandleMessage(メッセージMSG){
                スーパー.handleMessage(MSG)。
                mainActivityWeakReference.get()textView.setText(msg.obj。 + "" ); 
            } 
        } 
    }

 

おすすめ

転載: www.cnblogs.com/Ocean123123/p/11022543.html
おすすめ