2

大家好,我是 android 编程的初学者,我在尝试理解 HandlerThread 的工作原理时遇到了一些麻烦。具体来说,当我在添加到线程消息队列的可运行对象中调用该方法时,我不确定自定义视图类中的方法是否在后台线程(或非 UI 线程)中执行。

我有一个自定义视图和 HandlerThread 在 mainactivity 中初始化:

HandlerThread mainHandlerThread = new HandlerThread("mainhandler");
mainHandlerThread.start();
Handler mainHandler = new Handler(mainHandlerThread.getLooper());
myCustomView mcv = (MyCustomView) findViewById(R.id.customView);

在 MyCustomView 类(扩展视图)中,我有一个名为 update() 的方法:

public void update(int number, String txt) {
    //perform some calculations
    invalidate(); //redraw the view
}

每次 MainActivity 检测到变化时,都会使用 mainHandler.post() 调用 MyCustomView 的更新方法:

mainHandler.post(new Runnable() {
    @Override
    public void run () {
        mcv.update(123,"test")
    }
});

上述代码是否会导致从 HandlerThread(非 UI 线程)重绘自定义视图?我能够同时使用invalidate()和来绘制视图postInvalidate(),因此我对该update()方法是在 UI 线程上运行还是在我创建的 HandlerThread 上运行感到困惑。

4

0 回答 0