Является ли 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));