2016-10-10 36 views
0

在我的Android應用程序,我有3個活動A,B和C奇怪的活動的啓動順序 - Android電子

活動A是我的應用程序的啓動活動,它裏面有一個與下面的代碼按鈕,點擊後:

startActivity(new Intent(this , B.class)); 
finish(); 

在活動BI有一個按鈕,啓動活動C:

startActivity(new Intent(this , C.class)); 

在活動C,我需要完成的活動的時候,家裏按下按鈕:

public boolean onKeyDown(int keyCode,KeyEvent event) 
{ 
    if (keyCode == KeyEvent.KEYCODE_HOME) 
    { 
     finish(); 
     return true; 
    } 
    return super.onKeyDown(keyCode,event); 
} 

現在我希望在我的任務頂部轉入步驟B,但是當我點擊從發射活動A中的應用程序圖標啓動,如此看來整個任務以某種方式結束。 有人可以解釋發生了什麼,爲什麼我會得到這種行爲?

+0

後對這些活動的清單條目。它們中的任何一個都包含['android:clearTaskOnLaunch =「true」'](https://developer.android.com/guide/topics/manifest/activity-element.html#clear)或['android:launchMode =「singleTask 「'](https://developer.android.com/guide/topics/manifest/activity-element.html#lmode)? – Bryan

+1

此外,屬性['android:noHistory =「true」'](https://developer.android.com/guide/topics/manifest/activity-element.html#nohist)可能對您更好,而不是傾聽爲* Home *按鈕按下。該屬性在屏幕上不再顯示後清除任務中的「活動」。 – Bryan

+0

清單中沒有這樣的屬性 – ammcom

回答

0

在您發佈的代碼,活動B正在試圖啓動活動B,不活動C.

在活動

BI有一個按鈕,啓動活動C:

startActivity(新意圖(此,B 。類));

應該是:

在活動B I有一個按鈕,開始活動C:

startActivity(新意圖(此,C.class));

+0

我認爲這是一個錯誤的複製/粘貼 – rguerra

+0

對不起錯了,糾正它 – ammcom

+0

好吧,那很好。 :) – greysqrl

1

插入此代碼到您的第一項活動,並呼籲它裏面的onCreate(...)

private void killIfIsnotTaskRoot() { 
    if (!isTaskRoot() 
      && getIntent().hasCategory(Intent.CATEGORY_LAUNCHER) 
      && getIntent().getAction() != null 
      && getIntent().getAction().equals(Intent.ACTION_MAIN)) { 

     finish(); 
     return; 
    } 
} 

...一個「singleTop」活動的一個新實例,也可以創建以處理一個新的意圖。但是,如果目標任務已經在其堆棧頂部存在一個活動的現有實例,那麼該實例將接收新的目標(在onNewIntent()調用中);一個新的實例不會被創建。在其他情況下 - 例如,如果「singleTop」活動的現有實例位於目標任務中,但不在堆棧頂部,或者位於堆棧頂部,但不在目標任務中 - 則新實例將被創建並推入堆棧。

看看這個鏈接How to prevent multiple instances of an activity when it is launched with different intents

+0

好吧,這可能會解決問題,但我問爲什麼要活動A開始?但是當我在活動B中時按下主頁按鈕時,活動A未啓動! – ammcom