Активность начинается с задержкой, когда вызывается startActivity из фонового потока и основной поток блокируется - PullRequest
1 голос
/ 03 апреля 2019

Я пытаюсь заблокировать основной поток и показать пользователю диалоговую активность (запущенную в другом android:process) для принятия решения да / нет. После того, как пользователь нажмет «да» или «нет», действие диалога завершится, и основной поток возобновится. Обратите внимание, что блокировка основного потока требуется для моего проекта.

Запуск диалога:

private boolean getUserDecision() {
    DialogRunnable dialogRunnable = new DialogRunnable();
    Thread thread = new Thread(dialogRunnable);
    thread.start();
    while (thread.isAlive()) {
        try {
            // block the thread until user enters his decision
            thread.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
    return dialogRunnable.decision;
}

И DialogRunnable:

class DialogRunnable extends Runnable {
    public boolean decision;

    @Override
    public void run() {
        Looper.prepare();
        Intent intent = /* intent for launching the dialog */
        intent.setResultMessenger(new Messenger(new Handler() {
            @Override
            public void handleMessage(Message msg) {
                Looper.myLooper().quit();
                decision = msg.arg1 == 1;
            }
        }));
        startActivity(intent);
        Looper.loop();
    }
}

Неожиданное поведение

Если в основном потоке вызывается getUserDecision, диалоговое окно начинается после заметной задержки (~ 1 с), но вызов этого метода из фонового потока немедленно запускает диалоговое окно. Почему?

1 Ответ

1 голос
/ 04 апреля 2019

Это связано с тем, что служба диспетчера активности ожидает завершения приложения onPause.А поскольку основной поток заблокирован, ActivityManagerService ожидает 500 мс и сдается, а затем запускает следующую операцию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...