2013-06-18 205 views
1

我在我的應用程序中實施了GCM,並根據從服務器接收到的有效內容,我開始將活動稱爲活動(B)。在從服務開始活動之前關閉所有活動

我的要求是,如果我在使用應用程序時從服務器接收到特定的有效負載,並且假設我在Activity(A)上,那麼它(A)應該關閉,只有Activity(B)應該在只要活動B從GCM的GCMIntentService類開始,應用程序應該關閉所有堆疊的活動。

我試過的東西,但沒有奏效。

Intent myIntent=new Intent(myContext,ActivityB.class); 
myIntent.setFlag(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
myContext.startActivity(myIntent); 

我也試過標誌

Intent.FLAG_ACTIVITY_NEW_TASK 

與所有組合。

但沒有運氣。讓我知道是否有任何可能性,我在清單中的某處出現錯誤,同時聲明活動我沒有在我的Manifest文件中使用像launchMode或其他任何特殊參數。

回答

1

您需要啓動應用程序的根活動(即:有ACTION=MAIN,並在清單CATEGORY=LAUNCHER一):

Intent intent = new Intent(context, RootActivity.class); 
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP); 
intent.putExtra("launchActivityB", true); 

這將清除任何現有任務的所有活動,下面的代碼並開始一個新的實例RootActivity。在RootActivity.onCreate()添加以下代碼(後調用super.onCreate()

if (getIntent().hasExtra("launchActivityB")) { 
    // We have been started so that we can launch ActivityB, finish and do that now 
    finish(); // End this activity right now 
    Intent intent = new Intent(this, ActivityB.class); 
    startActivity(intent); 
    return; // do no further processing in this activity 
} 

注:即試圖發起ActivityBFLAG_ACTIVITY_CLEAR_TOP不會做你想要的是什麼,因爲這樣的原因FLAG_ACTIVITY_CLEAR_TOP作品它清除所有活動從現有任務(位於)正在嘗試啓動的活動的現有實例之上(在此例中爲ActivityB。由於您的任務中沒有現有的ActivityB實例,這個標誌沒有做任何事情

+0

我得到你了但我有很多交流在我的情況下可能是根作爲X,Y,Z的活動,所以我如何才能找到用戶目前在哪個活動上,這樣我就可以啓動一個內向並在啓動ActivityB之前完成它。主要活動的啓動是否會在其上面進行所有的活動? – pyus13

+0

你有很多根活動?請張貼清單。 –

+0

如果你只考慮作爲根的主要活動,那麼它只有一個。實際上,根據我的回答,我認爲你正在考慮用戶目前正在作爲根活動的活動。那麼所有從應用程序堆棧開始的根源活動都將清除? – pyus13