Android-强制在同一堆栈中启动新活动

时间:2019-04-12 06:47:35

标签: android android-intent android-activity stack android-task

我正在尝试做的事情:

  

我目前在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个实例并中断了流程,因为第二个实例是一个新实例,导致onCreate()被调用,而require onNewIntent()的连续性被呼叫。

注意: 我正在使用标志Activity B启动FLAG_ACTIVITY_NEW_TASK,因为即使Activity B在后​​台被杀死,我也希望Activity A被保留。

所需行为:

  

Activity B发送Activity A的意图时,如果Activity A在后​​台仍然有效,则应恢复Activity B   实例化,以防它在后台被杀死。

可能的解决方案,我想这里可能是在启动Stack #0时可以在意图中设置一些标志,以便只有Stack #1而没有task。正在创建的第二个堆栈似乎在这里出现问题。 如果有人也可以弄清stacktask之间的区别,我将能够更好地理解,因为这似乎与Android文档中描述的from __future__ import print_function from builtins import input mylist = ['apple', 'banana', 'pineapple'] mylist.pop(mylist.index(input('Which element do you want to remove from the list?'))) print(mylist) 不一致。

0 个答案:

没有答案
相关问题