[英]singleInstance launch mode: why is onCreate called after activity is brought to front?
[英]onActivityResult do not fire if launch mode of activity is singleInstance
我有一個Activity,它基本上是我的主要活動,它的啟動模式是單個實例。 但由於singleInstance, onActivityResult()
回調不會觸發。 如果我將清單文件中的啟動模式更改為任何其他模式,它可以正常工作。
你能解釋為什么這個回調不起作用嗎?
我認為問題是singleInstance不會讓被調用者活動與調用者存在於同一個任務中,因此它無法將值返回給調用者。
考慮使用singleTask:
singleTask
系統在新任務的根目錄下創建活動,並將意圖路由到該任務。 但是,如果活動的實例已存在,系統會通過調用其onNewIntent()方法將意圖路由到現有實例,而不是創建新實例。
singleInstance
與“singleTask”相同,但系統不會在持有實例的任務中啟動任何其他活動。 活動始終是其任務的唯一成員。
http://developer.android.com/guide/topics/manifest/activity-element.html
如果活動是singleInstance
,它將是任務中唯一的活動,因此它始終是任務的頂部。 因此,當您調用startActivityForResult
,它將立即觸發回調方法。
“ singleInstance ”活動不允許其他任何活動成為其任務的一部分。 這是任務中唯一的活動。 如果它啟動另一個活動,則該活動將分配給另一個任務。 活動始終是其任務的唯一成員。
我認為onActivityResult
不適用於singleInstance
您不能將singleInstance
或singleTask
與startActivityForResult
方法一起使用。
標准模式或singleTop啟動模式將解決問題。
檢查“ActivityStarter.computeLaunchingTaskFlags()”方法:
} else if (mSourceRecord.launchMode == LAUNCH_SINGLE_INSTANCE) {
// The original activity who is starting us is running as a single
// instance... this new activity it is starting must go on its
// own task.
mLaunchFlags |= FLAG_ACTIVITY_NEW_TASK;
這就是為什么在使用單實例啟動模式的原始活動時添加NEW_TASK標志的原因。
檢查“ActivityStarter.sendNewTaskResultRequestIfNeeded()”方法:
if (sourceStack != null && (mLaunchFlags & FLAG_ACTIVITY_NEW_TASK) != 0) {
// For whatever reason this activity is being launched into a new task...
// yet the caller has requested a result back. Well, that is pretty messed up,
// so instead immediately send back a cancel and let the new task continue launched
// as normal without a dependency on its originator.
Slog.w(TAG, "Activity is launching as a new task, so cancelling activity result.");
sourceStack.sendActivityResultLocked(-1 /* callingUid */, mStartActivity.resultTo,
mStartActivity.resultWho, mStartActivity.requestCode, RESULT_CANCELED,
null /* data */);
這就是FLAG_ACTIVITY_NEW_TASK始終立即返回RESULT_CANCELED的原因。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.