关于Android中启动模式的两个问题

时间:2017-06-25 15:26:47

标签: android launchmode

当我使用startActivityForResult()Activity2中启动Activity1时,如果Activity1Activity2不在同一个任务堆栈中,{{1} }是0(Activity.RESULT_CANCELED)。

如果resultCode的launchMode是标准的,而Activity1的launchMode是singleTask,则我得到的Activity2为0。

堆栈中发生了什么?

如果Activity1的launchMode是singleTop而Activity1使用startActivityForResult()方法启动自身,则堆栈有两个Activity1实例。

堆栈中发生了什么?

1 个答案:

答案 0 :(得分:0)

我自己得到了答案。

对于第一个问题,我在方法说明中找到了答案startActivityForResult(Intent,int,Bundle)。

enter image description here

如下图所示,如果ActivityY结束,显示的Activity可能是ActivityX,因此它会立即收到不确定结果的取消结果。当api低于20时,就会发生这种情况。

enter image description here

对于下一个问题,我在源代码中找到了答案。

ActivityStack topStack = getFocusedStack(); ActivityRecord top = topStack.topRunningNonDelayedActivityLocked(notTop); if (top != null && r.resultTo == null) { Slog.d("DDY", "========------ " ); if (top.realActivity.equals(r.realActivity) && top.userId == r.userId) { if (top.app != null && top.app.thread != null) { if ((launchFlags&Intent.FLAG_ACTIVITY_SINGLE_TOP) != 0 || r.launchMode == ActivityInfo.LAUNCH_SINGLE_TOP || r.launchMode == ActivityInfo.LAUNCH_SINGLE_TASK) { ...... top.deliverNewIntentLocked(callingUid, r.intent);

当一个Activity试图自己启动时,r.resultTo不为null,所以它以标准模式开始。