Android Start活动无需创建新实例

时间:2013-04-09 14:02:45

标签: java android android-layout android-intent android-manifest

假设我有活动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>

6 个答案:

答案 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

这是活动的生命周期: enter image description here

您可以找到详细信息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");
    }