讓我們試着解釋我的問題: 我得到了一個應用程序和一個服務。 啓動應用程序與活動A. 服務發送一個廣播,可以讓應用程序啓動活動B 現在用戶開始活動C.Android:我如何避免已經在堆棧中的開始活動?
現在服務要重新開始b活動。但是,我怎麼讓他知道這項活動仍然在籌備中,或者是否存在這樣的意圖標誌?
如何避免它將啓動活動B,因爲它已經在堆棧中?
讓我們試着解釋我的問題: 我得到了一個應用程序和一個服務。 啓動應用程序與活動A. 服務發送一個廣播,可以讓應用程序啓動活動B 現在用戶開始活動C.Android:我如何避免已經在堆棧中的開始活動?
現在服務要重新開始b活動。但是,我怎麼讓他知道這項活動仍然在籌備中,或者是否存在這樣的意圖標誌?
如何避免它將啓動活動B,因爲它已經在堆棧中?
我認爲你需要讓你的活動B singleInstance
,如果它已經創造你不想再創造,這是launch mode of the activity可以在清單android:launchMode
定義,定義如何活動將被實例化。
android:launchMode="singleInstance"
工作正常! :)謝謝 – 2012-03-07 09:25:01
但是,如果我將launchMode設置爲singleInstance,我將無法正確獲取onActivityResult回調。 – DevAndroid 2015-09-04 12:22:38
它解決了我的問題.. – 2015-10-15 05:21:17
您可以使用標記Intent.FLAG_ACTIVITY_NEW_TASK。如果活動已經在運行,它會將其放在前面,而不是創建新的活動。
如果您添加Intent.FLAG_ACTIVITY_CLEAR_TOP與此,那麼在此活動後在堆棧中的所有活動將被清除。
這是exaclty我不想發生的事情。如果已經開始活動的活動。它不應該被覆蓋。 – 2012-03-07 09:11:26
這不會覆蓋該活動。它只會帶來已經開始的活動。 – 2012-03-07 09:23:48
Intent.FLAG_ACTIVITY_NEW_TASK不適用於我..這總是開始新的活動.. 請幫我出來 – 2014-08-08 06:08:27
如果活動將是,如果已經開始了頂部,設置FLAG_ACTIVITY_SINGLE_TOP標誌
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
mContext.startActivity(intent);
這在使用側欄/抽屜時特別有用,並且您不希望在前面打開兩次活動。 – dermatthias 2015-12-17 15:54:44
我開始使用Intent.FLAG_ACTIVITY_SINGLE_TOP從一個服務的活動,該活動不會啓動,我得到此錯誤: android.util.AndroidRuntimeException:從活動上下文外調用startActivity()需要FLAG_ACTIVITY_NEW_TASK標誌。這真的是你想要的嗎? – yeahman 2016-03-10 18:36:09
途徑android:launchMode="singleInstance"
,只是添加標誌到Intent
不爲我工作。 什麼工作是:
在代碼中獲取活動開始:
Intent intent = new Intent(activity, ActivityThatHasToBeStarted.class);
intent.setFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);
startActivity(intent);
在ActivityThatHasToBeStarted
:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0) {
finish();
return;
}
// Code for this creation
}
如果您不需要第二個活動了,這是件好事練習完成它,那麼你應該在手術結束後的第二次活動上做到這一點:
startActivity(new Intent(this, FirstActivity.class).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));
finish();
我建議您使用Intent.FLAG_ACTIVITY_CLEAR_TOP,因爲它會移除所有在您的目標活動之上開始的活動。
如:
Intent intent = new Intent(sourceActivity, Target activity);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent)
您可以考慮使用的android:launchMode="singleTop"
代替android:launchMode="singleInstance"
Good article about the differences
什麼是d到底是什麼?它是你寫的代碼嗎?如果是這樣,答案很簡單,**不**調用'StartActivity(B)'。 – 2012-03-07 08:58:40
對不起,我重寫了我的問題:) – 2012-03-07 09:02:24