LaunchMode "singleTop" игнорируется, когда действие начинается с startActivityForResult - PullRequest
0 голосов
/ 03 октября 2019

Я запускаю операцию с startActivityForResult() и хочу предотвратить запуск нескольких экземпляров в верхней части стека активности. Поэтому я ожидаю, что android:launchMode="singleTop" выполнит свою работу, но по какой-то причине флаг игнорируется.

После некоторых расследований мне удалось запустить только один экземпляр, добавив FLAG_ACTIVITY_REORDER_TO_FRONT к намерению, но я был бы признателен, если бы кто-то мог объяснить мне причину, по которой в этом случае «singleTop» не работает. Код очень прост.

// Activity class
Intent intent = new Intent(this, DetailsActivity.class);
// multiple instances can be launched without this line
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 
startActivityForResult(intent, REQUEST_CODE_DETAILS);

// AndroidManifest.xml
<activity
    android:name=".DetailsActivity"
    android:launchMode="singleTop"/>

Ответы [ 2 ]

1 голос
/ 03 октября 2019

Как работает SingleTop?

Предположим, у вас есть текущий стек активности, такой как

A->B->C

Теперь из текущей активности C, если вы запускаете A действие, которое являетсяsingleTop, поэтому в этом случае система создаст новый экземпляр A и выведет этот экземпляр наверх. (Если указанное действие не на вершине, то будет создан новый экземпляр)

Таким образом, стек будет выглядеть так:

A->B->C->A

Теперь, если вы попытаетесь снова открыть A, то в этом случае как A наtop уже, так что NO будет создан новый экземпляр. Вместо этого A получит обратный вызов в onNewIntent () метод

Flag

FLAG_ACTIVITY_REORDER_TO_FRONT

, он сканирует от начала стека до конца стека, и если он нашел экземпляр указанногозатем действие выводит это действие на передний план.

Так что в вашем случае, если DetailsActivity instacne уже присутствует в системе, тогда этот флаг выведет DetailsActivity на передний план

0 голосов
/ 03 октября 2019

startActivityForResult:"Например, если запускаемая операция использует режим запуска singleTask , она не будет выполняться в вашей задаче и, таким образом, вы сразу получите отмену result «. SingleInstance действия одинаковы.

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