Android Start活动无需创建新实例

Ibr*_*med 7 java android android-manifest android-intent android-layout

假设我有活动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");
    }
Run Code Online (Sandbox Code Playgroud)

但它会在活动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>
Run Code Online (Sandbox Code Playgroud)

Kai*_*dul 12

根据android活动生命周期,当你启动一个活动A:

生命周期方法清单:

Activity A.onResume();
Activity A.onStart();
Activity A.onCreate();
Run Code Online (Sandbox Code Playgroud)

活动状态:

Activity A : Resumed
Run Code Online (Sandbox Code Playgroud)

当您启动活动B时:

生命周期方法清单:

Activity A.onStop();  
Activity B.onResume();
Activity B.onStart();
Activity B.onCreate();
Activity A.onPause();
    ...
    ...
    ...
Run Code Online (Sandbox Code Playgroud)

活动状态:

   Activity A : Stopped
   Activity B : Resumed
Run Code Online (Sandbox Code Playgroud)

当你再次启动A时:

生命周期方法清单:

Activity B.onDestroy();  
Activity B.onStop(); 
Activity A.onResume();
  ....
  ....
  ....      
Run Code Online (Sandbox Code Playgroud)

活动状态:

   Activity B : Destroyed
   Activity A : Resumed
Run Code Online (Sandbox Code Playgroud)

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

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

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

  • 当A开始B时,A刚刚停止(但仍然活着**).一旦B完成它将自动重启并恢复A. A将一直存活,直到它自己调用`finish()`. (3认同)

小智 5

intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
Run Code Online (Sandbox Code Playgroud)

试试吧...它使旧活动在没有新实例的情况下出现...


jim*_*zer 0

尝试这个

public void onBackPressed() {
    super.onBackPressed();
    Log.d("Back", "TEST");
}
Run Code Online (Sandbox Code Playgroud)

这就是您所需要的全部。