Нулевое исключение HandlerThread - Android
Я использую ThreadHandler в своем приложении таким образом,
public class MessageThread extends HandlerThread {
Handler mHandler;
public MessageThread() {
super("Message Thread");
}
public void queueProcessMessage(msgObject mObj) {
mHandler.obtainMessage(PROCESS_MESSAGE, mObj).sendToTarget();
}
@Override
protected void onLooperPrepared() {
Commons.logIt("OnLoopPrep");
mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case PROCESS_MESSAGE:
process_message((msgObject) msg.obj);
break;
default:
break;
}
}
};
}
process_message(msgObject obj) {
//Do stuff
}
}
И я инициализирую его в onCreate() так,
public void onCreate(Bundle savedInstanceState) {
MessageThread mThread = new MessageThread();
mThread.start();
mThread.getLooper();
if (mThread != null)
mThread.queueProcessMessage(Object);// this is the line the compiler is pointing at.
}
И это работает нормально, проблема в том, что мне нужно было добавить что-то еще, где я должен начать другое действие, ожидающее результата, поэтому мне пришлось инициализировать / использовать его, как показано ниже, так как onActivityResult вызывается перед onCreate, когда я запускаю действие для результата на этот раз я получаю ошибку
java.lang.NullPointerException: Attempt to invoke virtual method 'android.os.Message android.os.Handler.obtainMessage(int, java.lang.Object)' on a null object reference
,
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == IMAGE_ACTIVITY_REQUEST_CODE) {
if (resultCode == Activity.RESULT_OK) {
MessageThread mThread = new MessageThread();
mThread.start();
mThread.getLooper();
mThread.queueProcessMessage(new msgObject("stuff"));
}
}
}
Похоже, что поток не получает инициализации, что я здесь пропускаю?
Изменить 1,
После обсуждения этой проблемы, похоже, что инициализация обработчика занимает немного времени, я сделал это, это уродливо, но работает, есть идеи, что мне делать?
public void queueProcessMessage(msgObject mObj) {
while (mHandler == null)
Log.i(TAG, "Not init yet"); //It keeps on looping here
mHandler.obtainMessage(PROCESS_MESSAGE, mObj).sendToTarget();
}