Является ли mHandler.obtainMessage для запуска handleMessage(сообщение msg)

Второй вопрос дня! (Извините, новичок)

Я пытаюсь создать отдельный поток, и в этом потоке мне нужно иметь возможность отправлять информацию обратно в поток пользовательского интерфейса. Для этого я создал новый класс обработчиков:

private static class nHandler extends Handler{
    private final WeakReference<MainActivity> mTarget;
    public nHandler(MainActivity context){
        mTarget = new WeakReference<MainActivity>((MainActivity) context);
    }

    @Override
    public void handleMessage(Message msg){ Log.d("Something", "It got here")}
    }

В моем основном классе деятельности у меня есть частный статический nHandler mHandler; Затем я создал обработчик в моем onCreate(), используя mHandler = new nHandler(this);

Когда я создаю другой поток, и он запускается, я создаю объект-обработчик и устанавливаю его на тот, который я передал в конструкторе. В этом другом классе у меня есть функция:

private synchronized void setState(int state){
    //lets add some logging
    mState = state;
    //Give the handler something so the Main Activity Updates
    mHandler.obtainMessage(MainActivity.HANDLER_CHANGE_SERVER_STATUS, state, -1);
}

Но в журнале я не вижу, чтобы мой журнал появлялся. Возможно, я не совсем понимаю, как должны работать обработчики, поэтому, если вы считаете, что это так, можете ли вы помочь мне понять их и заставить их работать правильно?

Спасибо!

2 ответа

Хорошо, ребята.....

Ну, я понял это.

В любое время вы делаете

mHandler.obtainMessage() убедитесь, что вы включили .sendToTarget();

В итоге это выглядело так:

mHandler.obtainMessage(MainActivity.HANDLER_CHANGE_SERVER_STATUS, state, -1).sendToTarget();

Я оставляю этот вопрос на тот случай, если кто-то другой Google за это

Вы должны отправить полученное сообщение.

 mHandler.sendMessage( mHandler.obtainMessage(MainActivity.HANDLER_CHANGE_SERVER_STATUS, state, -1));
Другие вопросы по тегам