Отправка сообщений из другого обработчика в очередь сообщений другого обработчика

Я хочу отправить из другого обработчика (не из самого обработчика LooperThread) в очередь сообщений LooperThread, но он ничего не показывает.

Thread.sleep должен запустить mHandler.

Есть идеи?

Основная деятельность

    new LooperThread().start();
    try {
        Thread.sleep(5000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    Handler handler = new Handler(LooperThread.mHandler.getLooper());

    handler.sendEmptyMessage(3);

LooperThread

class LooperThread extends Thread {
static  Handler mHandler;

public void run() {
    Looper.prepare();

    mHandler = new Handler() {
        public void handleMessage(Message msg) {
            Log.d("LooperThread","handleMessage");
        }
    };

    Looper.loop();
}
}

1 ответ

Решение

Причина, по которой вы ничего не видели, потому что сообщение отправляется "обработчику", а не "LooperThread.mHandler", а только "LooperThread.mHandler" что-то печатает.

Мое предложение: - Используйте HandlerThread, как предложено @zapl, и удалите сон. getLooper будет блокировать, когда петлитель не готов. - Не используйте статические переменные, такие как "mHandler", и особенно в этом случае вам вообще не нужен "mHandler", чтобы получить петлитель, если вы выберете HandlerThread

Другие вопросы по тегам