2017-06-25 26 views
-1

起跑模式的問題,當我使用startActivityForResult()Activity1開始Activity2,如果Activity1Activity2不在同一個任務堆棧中,resultCode爲0(Activity.RESULT_CANCELED)。兩個關於Android的

IF Activity1的launchMode是標準的,Activity2的launchMode是singleTask,該resultCode我得到的是0

在堆棧發生了什麼?

如果Activity1的launchMode是singleTop,並且Activity1使用startActivityForResult()方法啓動自身,則該堆棧有兩個Activity1實例。

堆棧中發生了什麼?

回答

0

我自己得到了答案。

對於第一個問題,我在方法startActivityForResult(Intent,int,Bundle)的註釋中找到了答案。

enter image description here

如在下面的圖中所示,示出的活動可以是ActivityX如果ActivityY完成,所以它立即接收對不確定result.It取消結果恰好當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);

當活動嘗試啓動本身,r.resultTo不爲空,所以它與標準模式啓動。