2013-04-09 77 views
7

假設我有活動A,充當我的應用程序的根活動。而形成這個活動,我去活動B.Android開始活動而不創建新實例

我希望能夠從B到A回去,而無需創建活動A的新實例

這個代碼是在活動B

public void onBackPressed() { 
     super.onBackPressed(); 
//  Intent intent= new Intent(getBaseContext(), MainActivity.class); 
//  intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP); 
     Intent myIntent = new Intent(getBaseContext(), MainActivity.class); 
     myIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     startActivity(myIntent); 
     Log.d("Back", "TEST"); 
    } 

,但它基於活動A調用onCreate。我想要做的是有一個在後臺時,活動B被啓動,並且每當它完成切換回活性的

這是清單

<activity 
      android:name=".MainActivity" 
      android:label="@string/title_activity_main" 
      android:screenOrientation="unspecified" 
      android:launchMode="singleTask" 
      android:stateNotNeeded="false"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.HOME"/> 
       <category android:name="android.intent.category.DEFAULT" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

     <activity 
      android:label="@string/app_name" 
      android:name=".SubmenuActivty" > 
     </activity> 
+0

感謝誰額定下來。你甚至讀過嗎? – 2013-04-09 14:11:45

回答

0

試試這個

public void onBackPressed() { 
    super.onBackPressed(); 
    Log.d("Back", "TEST"); 
} 

這就是你需要的。

2

你不需要做任何事情。剛剛從活動B.

刪除您onBackPressed()方法默認情況下,當你從活動A活動B移動,Android的添加活動A到堆棧中。當您從活動B中按下後退按鈕或完成後,它會自動從後臺堆棧恢復活動A.

如果您希望以編程方式完成活動B的活動finish()方法,則需要執行此操作。

+0

它會通過創建它的新實例來從backstack恢復Activity a。我希望活動A一直活着 – 2013-04-09 14:13:06

+0

如何完成活動A而開始活動B?如果不確定活動A將從backstack恢復到最後一個狀態 – 2013-04-09 14:21:22

+0

我不使用Intent myIntent = new Intent(getBaseContext(),SubmenuActivty.class); startActivity(myIntent);開始活動A – 2013-04-09 14:28:36

0

使用moveTaskToBack(true);

public void onBackPressed() { 
// TODO Auto-generated method stub 
moveTaskToBack(true); 
super.onBackPressed(); 
} 

,或者您也可以使用結束()

+0

這不會使活動保持活動狀態,它只會創建活動的新實例..它會再次調用oncreate方法 – 2013-04-09 14:15:32

11

根據機器人活動的生命週期,當你啓動一個活動答:

生命週期方法列表:

Activity A.onResume(); 
Activity A.onStart(); 
Activity A.onCreate(); 

活動狀態:

Activity A : Resumed 

當您啓動現在活動B:

生命週期方法列表:

Activity A.onStop(); 
Activity B.onResume(); 
Activity B.onStart(); 
Activity B.onCreate(); 
Activity A.onPause(); 
    ... 
    ... 
    ... 

活動狀態:

Activity A : Stopped 
    Activity B : Resumed 

當你再次啓動A現在:

生命週期方法列表:

Activity B.onDestroy(); 
Activity B.onStop(); 
Activity A.onResume(); 
    .... 
    .... 
    ....  

活動狀態:

Activity B : Destroyed 
    Activity A : Resumed 

這是一個活動的生命週期: enter image description here

你可以找到的細節here

根據默認行爲,活動A進入onStop()狀態並且不活動,並且需要在返回到活動A時創建新實例。我所知道的 - 沒有辦法讓A實例保持活動狀態。

+3

當A開始B時,A剛剛停止(但仍然是** alive **)。只要B完成,它就會自動重新啓動並恢復A. A將一直活着,直到它自己調用「finish()」。 – 2013-04-30 14:03:05

3
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 

試試吧......這讓老活動前沒有新的實例...