当我使用startActivityForResult()
在Activity2
中启动Activity1
时,如果Activity1
和Activity2
不在同一个任务堆栈中,{{1} }是0(Activity.RESULT_CANCELED)。
如果resultCode
的launchMode是标准的,而Activity1
的launchMode是singleTask,则我得到的Activity2
为0。
堆栈中发生了什么?
如果Activity1的launchMode是singleTop而Activity1使用startActivityForResult()方法启动自身,则堆栈有两个Activity1实例。
堆栈中发生了什么?
答案 0 :(得分:0)
我自己得到了答案。
对于第一个问题,我在方法说明中找到了答案startActivityForResult(Intent,int,Bundle)。
如下图所示,如果ActivityY结束,显示的Activity可能是ActivityX,因此它会立即收到不确定结果的取消结果。当api低于20时,就会发生这种情况。
对于下一个问题,我在源代码中找到了答案。
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,所以它以标准模式开始。