Почему код выполняется после намеренного перенаправления кода? - PullRequest
0 голосов
/ 09 октября 2018

У меня есть Android код:

      Intent launchIntent = packageManager.getLaunchIntentForPackage(context.getPackageName());
      cpa.startMainActivity(launchIntent.getComponent(), user);

      // try to move down
      if (dialogDismisser != null) {
        dialogDismisser.run();
      }

Как может быть, что dialogDismisser вызывается даже после cpa.startMainActivity?

Перенаправление намереннообещали случиться только когда-нибудь в будущем?

Ответы [ 3 ]

0 голосов
/ 09 октября 2018

Запуск действия не убивает вашу нить.Ваш поток будет продолжать работать, завершать функцию и любые другие функции до тех пор, пока он не вернется к своему петлителю или не завершит поток.Если вы не хотите выполнять оставшийся код, вам нужно вернуть.

Новое действие начнется в следующий раз, когда основной поток получит возможность просмотреть свои сообщения.Так что, если это вызывается в потоке, переключение следующего контекста.Если это выполняется в главном потоке, то когда он возвращается к петлителю, после обработки любых других ожидающих сообщений.(Предполагается, что вы запускаете Activity в своем собственном приложении. Если нет, это происходит в следующий раз, когда контекст ОС переключается на основной поток этого приложения, и этот поток достигает петлителя).

0 голосов
/ 09 октября 2018

Первые две строки кода (показаны ниже) , которые вы написали, запускают еще одну Активность .

Intent launchIntent = packageManager.getLaunchIntentForPackage(context.getPackageName());
cpa.startMainActivity(launchIntent.getComponent(), user);

Начало новой Активности на Android не завершает потоки.

Таким образом, остальная часть вашего кода (показано ниже) будет продолжать работать, пока не достигнет конца вашего кода.

if (dialogDismisser != null) {
    dialogDismisser.run();
}

И чтобы ответить на ваш последний вопрос:

Перенаправление намерений обещано произойти только в будущем?

Вид.Новое действие запускается немедленно вместе с намерением;однако остальная часть вашего кода будет продолжать работать, пока не достигнет конца.

0 голосов
/ 09 октября 2018

Перенаправление намерений обещано произойти только в будущем?

Конечно.Это асинхронная операция.Более того, вызов приводит к запуску нового (или запуска уже запущенного) процесса через IPC без прерывания вызывающей стороны.

...