handlerthread如何與UI線(xiàn)程通信

小樊
82
2024-06-28 18:46:30

HandlerThread是Android中的一個(gè)類(lèi),用于在后臺(tái)線(xiàn)程中執(zhí)行任務(wù)。要與UI線(xiàn)程進(jìn)行通信,可以使用Handler類(lèi)來(lái)實(shí)現(xiàn)。

首先,在HandlerThread中創(chuàng)建一個(gè)Handler對(duì)象,并在UI線(xiàn)程中創(chuàng)建一個(gè)Handler對(duì)象,然后在UI線(xiàn)程中向HandlerThread發(fā)送消息,從而實(shí)現(xiàn)UI線(xiàn)程與HandlerThread之間的通信。

以下是一個(gè)簡(jiǎn)單的示例代碼:

public class MyHandlerThread extends HandlerThread {
    private Handler mHandler;

    public MyHandlerThread(String name) {
        super(name);
    }

    @Override
    protected void onLooperPrepared() {
        super.onLooperPrepared();
        mHandler = new Handler(getLooper()) {
            @Override
            public void handleMessage(Message msg) {
                //處理消息
            }
        };
    }

    public Handler getHandler() {
        return mHandler;
    }
}

public class MainActivity extends AppCompatActivity {
    private MyHandlerThread mHandlerThread;
    private Handler mHandler;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mHandlerThread = new MyHandlerThread("MyHandlerThread");
        mHandlerThread.start();

        mHandler = new Handler(Looper.getMainLooper()) {
            @Override
            public void handleMessage(Message msg) {
                //處理從HandlerThread傳遞來(lái)的消息
            }
        };

        //發(fā)送消息給HandlerThread
        mHandlerThread.getHandler().sendMessage(new Message());
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        mHandlerThread.quit();
    }
}

在上面的例子中,MyHandlerThread類(lèi)繼承自HandlerThread,并在onLooperPrepared()方法中創(chuàng)建了一個(gè)Handler對(duì)象用于處理消息。在MainActivity中,我們創(chuàng)建了一個(gè)Handler對(duì)象用于處理來(lái)自HandlerThread的消息,并且可以通過(guò)調(diào)用getHandler()方法獲取MyHandlerThread中的Handler對(duì)象,然后發(fā)送消息給HandlerThread。

0