Я не могу поймать сообщение в основном потоке из моего потока обработчика - PullRequest
0 голосов
/ 25 мая 2020

Суть проблемы в том, что я создал свой 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);
            }
        }
    };
...