Суть проблемы в том, что я создал свой HandlerThread, вот код создания. и когда работа выполняется в моем потоке, а работа абстрактная, поток просто спит, я отправляю сообщение в основной поток, чтобы он обновил элементы. Но сообщение в основном потоке не улавливается. Что я делаю не так? Вот код отправки и инициализации. Ниже приведен код обработчика для основного потока.
public class MyWorkerThread extends HandlerThread {
public static final int MSG_FOR_THREAD= 1;
private Handler handler;
public MyWorkerThread(String name) {
super(name);
}
public void prepareHandler()
{
handler = new Handler();
}
public void postTask(Runnable task)
{
handler.post(task);
}
public Handler getHandler()
{
return handler;
}
} Работа во фрагменте
btnHandler.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
task = new Runnable() {
@Override
public void run() {
tvText.setText("Loading...");
btnHandler.setEnabled(false);
prBar.setVisibility(View.VISIBLE);
SystemClock.sleep(10000);
Message msg = Message.obtain(handlerMain,MyWorkerThread.MSG_FOR_THREAD);
myWorkerThread.getHandler().sendMessage(msg);
Log.d("Tag", "Send message");
}
};
myWorkerThread.prepareHandler();
myWorkerThread.start();
myWorkerThread.postTask(task); }
});
handlerMain = new Handler(Looper.getMainLooper()){
@Override
public void handleMessage(@NonNull Message msg) {
if(msg.what == MyWorkerThread.MSG_FOR_THREAD)
{
tvText.setText("Ready");
btnHandler.setEnabled(true);
prBar.setVisibility(View.GONE);
}
}
};