Android - запуск новых действий в одном стеке - PullRequest
0 голосов
/ 12 апреля 2019

Что я пытаюсь сделать:

Я сейчас нахожусь на Activity A (в приложении A).Я запускаю Activity B (в приложении B), используя startActivity().Как только я закончу с Activity B, вместо того, чтобы просто завершить его и ожидать появления Activity A, я фактически восстановлю Activity A с намерением на случай, если Activity A был убит в фоновом режиме.

Текущий dumpsys Журналы:
Когда в Activity A

Stack #0:
Task id #23
userId=0 effectiveUid=u0a123 mCallingUid=0 mUserSetupComplete=true mCallingPackage=null
affinity=com.domain.appA
intent={act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10800100 cmp=com.domain.appA/.ActivityA}
realActivity=com.domain.appA/.ActivityA

Когда Activity B запущен

Stack #1:
Task id #25
userId=0 effectiveUid=u0a99 mCallingUid=u0a123 mUserSetupComplete=true mCallingPackage=com.domain.appA
affinity=com.domain.appB
intent={act=MY_ACTION flg=0x10000000 cmp=com.domain.appB/com.domain.appB.ActivityB}
realActivity=com.domain.appB/com.domain.appB.ActivityB

Stack #0:
Task id #23
userId=0 effectiveUid=u0a123 mCallingUid=0 mUserSetupComplete=true mCallingPackage=null
affinity=com.domain.appA
intent={act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10800100 cmp=com.domain.appA/.ActivityA}
realActivity=com.domain.appA/.ActivityA

Когда Activity A запускается из Activity B

Stack #1:
Task id #26
userId=0 effectiveUid=u0a123 mCallingUid=u0a99 mUserSetupComplete=true mCallingPackage=com.domain.appB
affinity=com.domain.appA
intent={act=ACTION_FOR_A flg=0x10820000 cmp=com.domain.appA/.ActivityA}
realActivity=com.domain.appA/.ActivityA

Stack #0:
Task id #23
userId=0 effectiveUid=u0a123 mCallingUid=0 mUserSetupComplete=true mCallingPackage=null
affinity=com.domain.appA
intent={act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10800100 cmp=com.domain.appA/.ActivityA}
realActivity=com.domain.appA/.ActivityA

Наблюдается ошибочное поведение: Activity A вместо возобновления фактически создается снова, что приводит к 2 экземплярам и нарушениюпоток, потому что 2-й экземпляр является новым, в результате чего вызывается onCreate(), в то время как непрерывность вызова требует onNewIntent().

ПРИМЕЧАНИЕ: Я запускаю Activity B, используя флаг FLAG_ACTIVITY_NEW_TASK, потому что я хочу, чтобы Activity B был сохранен, даже если Activity A убит в фоновом режиме.

Желаемое поведение:

При отправке намерения от Activity B для Activity A, Activity A должно возобновиться, если оно все еще живо в фоновом режиме и должно быть созданов случае, если он был убит в фоновом режиме.

Возможное решение Я думаю, что здесь, возможно, есть какой-то флаг, который я могу установить в намерении при запуске Activity B, чтобы было только Stack #0и нет Stack #1.Второй создаваемый стек, кажется, проблема здесь.Я мог бы лучше понять, если бы кто-то также мог уточнить разницу между task и stack, потому что это, кажется, не согласуется с тем, что изображено task, чтобы быть в документации Android.

...