Вызов метода в пользовательском представлении из HandlerThread - PullRequest
2 голосов
/ 20 января 2020

Привет всем, я новичок в 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.

...