假设我有活动A充当我的应用的根活动。并形成这项活动,我去参加活动B.
我希望能够从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开始时以及完成后切换回活动A时在背景中有A.
这是清单
<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 :(得分:11)
根据Android活动生命周期,当您启动活动A:
生命周期方法清单:
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
这是活动的生命周期:
您可以找到详细信息here
根据默认行为,活动A进入onStop()状态并且不活动,需要在返回活动A时创建新实例。我知道 - 没有办法保持A实例的存活。
答案 1 :(得分:3)
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
尝试一下......它在没有新实例的情况下将旧活动放在前面......
答案 2 :(得分:2)
你不需要做任何事情。只需从活动B中删除onBackPressed()
方法。
默认情况下,当您从活动A 移至活动B 时,Android会将活动A 添加到Backstack。当您从活动B 按下后退按钮或完成后,它会自动从后台恢复活动A.
如果您希望以编程方式完成活动B,请在需要时调用活动的finish()
方法。
答案 3 :(得分:0)
试试这个
public void onBackPressed() {
super.onBackPressed();
Log.d("Back", "TEST");
}
这就是你所需要的一切。
答案 4 :(得分:0)
使用moveTaskToBack(true);
public void onBackPressed() {
// TODO Auto-generated method stub
moveTaskToBack(true);
super.onBackPressed();
}
或您也可以使用finish()
答案 5 :(得分:0)
你为什么要在 onBackPressed
开始活动?
你应该super.onBackPressed();
而不是开始新的活动。或者在你的finish()
方法中调用onBackPressed()
方法:
public void onBackPressed() {
finish();
Log.d("Back", "TEST");
}