Что я пытаюсь сделать:
Я сейчас нахожусь на 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.