我必须像这样app app:
A-> B-C-> d
X-> Y
在Y中,我想使用getLaunchIntentForPackage(“package”)来到D,但是我到了 A.我应该使用哪种启动模式等?如果可能的话,我想使用singleTask for ABCD。 此外,在D和我按回家并再次通过Icon for A启动然后根据启动模式我没有到达D(我想要),但是到A. DCB被清除。
我尝试了很多东西,但我只是不明白它是如何工作的。我似乎没有得到相应的行为。
答案 0 :(得分:1)
getLaunchIntentForPackage
只是为您提供了包的主要活动。在你的第一个应用程序中,我猜它是A
。因此,如果您尝试从第二个应用(X
- > Y
)启动它,它将启动A
而不是D
这是一个不同的活动。所以你没有进入D
。
当您按下主页并单击第一个应用程序的启动图标时,如果已有任务,则将其置于前台。 Looks like A
, the app's main activity (A
) gets invoked - 不是堆栈顶级活动D
。 B->C-D get cleared because you may be using singleTask
launch mode for Activity A
,它会尝试将您带回现有任务中的活动。
所以what you observe is expected. The launch modes are defined per activity,而不是每个应用/包级别。
因此,要从Y
升级到D
,您需要使用设置为FLAG_ACTIVITY_NEW_TASK
的意图标记启动活动D
,这将确保您进入现有D
,已在您的第一项任务中排在首位(A-> B-> C-> D)
要从主屏幕(启动器图标)may need to try below options for SingleTask
mode执行相同的操作,因为您要保留现有堆栈(A-> B-> CD),只需要转到{ {1}};引用链接:
D
"+ For launchMode=singleTask if there is an intent_filter in the
manifest the task stack is always cleared after returning to Home and
re-launching (returns to main activity instead of last activity).
+ For launchMode=standard re-launch from Home instead returns to last
activity in task (as expected).
+ If there is no intent_filter listed then even with
launchMode=singleTask re-launch from Home returns to the last activity
in the task"
模式下启动此功能。意图标记override manifest launch modes, see here