9

假设我有活动 A 作为我的应用程序的根活动。并形成这个活动,我去活动 B。

我希望能够在不创建活动 A 的新实例的情况下从 B 回到 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>
4

6 回答 6

12

根据 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

这是一个活动的生命周期: 在此处输入图像描述

你可以在这里找到详细信息

根据默认行为,活动 A 进入 onStop() 状态并且不活动,需要在返回活动 A 时创建一个新实例。我所知道的 - 没有办法让 A 实例保持活动状态。

于 2013-04-09T14:13:24.867 回答
5
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);

试试看...它使旧活动在没有新实例的情况下放在前面...

于 2014-01-24T06:08:38.490 回答
2

你不需要做任何事情。只需onBackPressed()从活动 B 中删除您的方法。

默认情况下,当您从Activity A移动到Activity B时,Android 会将Activity A添加到后台堆栈。当您从Activity B按下后退按钮或完成它时,它会自动从 backstack 中恢复 Activity A。

如果您想完成您的活动 B ,请finish()在需要时以编程方式调用活动的方法。

于 2013-04-09T14:06:08.373 回答
0

尝试这个

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

这就是你所需要的。

于 2013-04-09T14:05:30.073 回答
0

使用 moveTaskToBack(true);

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

或者你也可以使用finish()

于 2013-04-09T14:06:29.183 回答
0

你为什么要开始一个活动onBackPressed呢?你应该super.onBackPressed();而不是开始新的活动。或者finish()在你的方法中调用onBackPressed()方法:

public void onBackPressed() {
        finish();
        Log.d("Back", "TEST");
    }
于 2021-05-08T16:37:08.043 回答