Я попытался реализовать объект в Android, который будет работать в своем потоке (я не хочу, чтобы обработчик был общедоступным, я хочу, чтобы wrapedMessage-метод с собственным public api). Он имеет общедоступные методы для передачи данных объекту. Этот объект связан с жизненным циклом активности (onResume, onPause). Я хотел бы использовать looper и обработчик, а не только чистый поток Java с бесконечным циклом. Я хочу запустить рабочий поток в резюме и перестать работать с обратным вызовом. Объект должен бесконечно ждать нового сообщения. Это мой код ниже:Android Java-объект с собственным потоком с использованием looper
public class ThreadingObject {
private MyThread thread;
public ThreadingObject() {}
public void onResume() {
thread = new MyThread();
thread.startWorking();
}
public void onPause() {
thread.stopWorking();
}
public void setMessage(Object object) {
Message msg = new Message();
msg.obj = object;
thread.handler.sendMessage(msg);
}
protected void work(Object object) {
//Do something with object in own thread
}
private class MyThread extends Thread {
public Handler handler;
@Override
public void run() {
Looper.prepare();
handler = new Handler() {
@Override
public void handleMessage(Message msg) {
ThreadingObject.this.work((String[]) msg.obj);
}
};
Looper.loop();
}
public void startWorking() {
start();
}
public void stopWorking() {
handler.getLooper().quit();
}
}
}
Правильно ли реализация? Я получаю предупреждение: «отправка сообщения обработчику по мертвой теме». Есть ли какая-то проблема, которую я не вижу?
Вы Тринг, чтобы написать свой собственный 'HandlerThread'? – Selvin
Я читал о HandlerThread, и я думаю, что один из них - это то, что HandlerThread готовит Looper и Handler для меня. Есть ли у вас какой-либо пример, как я могу запустить и остановить поток в безопасном режиме (а не thread.join(), конечно)? – piotrek00
https://gist.github.com/SelvinPL/eaf75cf244df4d2f2ee6? – Selvin