温馨提示×

handlerthread如何与UI线程通信

小樊
81
2024-06-28 18:46:30
栏目: 编程语言

HandlerThread是Android中的一个类,用于在后台线程中执行任务。要与UI线程进行通信,可以使用Handler类来实现。

首先,在HandlerThread中创建一个Handler对象,并在UI线程中创建一个Handler对象,然后在UI线程中向HandlerThread发送消息,从而实现UI线程与HandlerThread之间的通信。

以下是一个简单的示例代码:

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传递来的消息
            }
        };

        //发送消息给HandlerThread
        mHandlerThread.getHandler().sendMessage(new Message());
    }

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

在上面的例子中,MyHandlerThread类继承自HandlerThread,并在onLooperPrepared()方法中创建了一个Handler对象用于处理消息。在MainActivity中,我们创建了一个Handler对象用于处理来自HandlerThread的消息,并且可以通过调用getHandler()方法获取MyHandlerThread中的Handler对象,然后发送消息给HandlerThread。

0