繁体   English   中英

Android Start活动无需创建新实例

[英]Android Start activity without creating new instance

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

根据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实例的存活。

intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);

尝试一下......它在没有新实例的情况下使旧活动成为现实......

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

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

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

试试这个

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

这就是全部,你需要的。

使用moveTaskToBack(true);

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

或者您也可以使用finish()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM