Привет всем, я новичок в android программировании, и у меня возникли небольшие проблемы, пытаясь понять, как работает HandlerThread. В частности, я не уверен, выполняется ли метод в пользовательском классе представления в фоновом потоке (или не в потоке пользовательского интерфейса) всякий раз, когда я вызываю метод в исполняемом модуле, который добавляется в очередь сообщений потока.
У меня есть пользовательский вид и HandlerThread, инициализированный в mainacctivity:
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
}
Everytime MainActivity обнаруживает изменение, он будет использовать mainHandler.post () для вызова метода обновления MyCustomView:
mainHandler.post(new Runnable() {
@Override
public void run () {
mcv.update(123,"test")
}
});
Вызывает ли приведенный выше код перерисовывание пользовательского представления из HandlerThread (который не является потоком пользовательского интерфейса) ? Мне удалось нарисовать представление, используя invalidate()
и postInvalidate()
, поэтому я не понимаю, работает ли метод update()
в потоке пользовательского интерфейса или в созданной мною HandlerThread.