2013-04-09 58 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); 

试试吧......这让老活动前没有新的实例...