大家好,我是 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 上运行感到困惑。