Android:如何在不使用finish()的情况下返回调用活动

Android:如何在不使用finish()的情况下返回调用活动,android,android-activity,Android,Android Activity,我使用以下命令从名为MainActivity的活动调用名为Activity1的活动: Intent intent = new Intent(Intent.ACTION_VIEW, uri); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

我使用以下命令从名为MainActivity的活动调用名为Activity1的活动:

Intent intent = new Intent(Intent.ACTION_VIEW, uri);
                    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                    startActivity(intent);
所以,当控件指向Activity1时。正常活动生命周期已启动。i、 调用e onCreate()等等

当我在控件处于Activity1时单击“上一步”按钮时。调用finish方法,该方法依次调用onDestroy(),现在控件返回MainActivity屏幕

@Override
public void onBackPressed() {
        Log.d(TAG, "onBackPressed()");
        finish();
    }
下次我打电话给Activity1。onCreate再次被调用,正如我在上一次调用中调用onDestroy(当我按下back按钮时)一样

问题: 1.当按下后退按钮时,有没有一种方法可以将控制权传递回MainActivity,而不必调用“finish()”方法? 2.调用finish时出现问题,每次我从MainActivity调用Activity1时,都会创建一个新的Activity1实例。这就是生命周期再次从onCreate()开始。。 我不希望这种情况发生,因为这已经成为一个主要的性能问题


我要寻找的主要问题是,当我第一次调用activity1时,是否可以从resume状态而不是oncreate状态启动它。

我认为您不需要在onBackPressed上调用“finish()”方法。当你按下后退按钮时,安卓会帮你做到这一点。onBackPressed用于最后的小步舞曲整理(将内容保存到sharepreferences等)

Android的默认行为是在屏幕上放置新活动时调用onCreate。如果不发生这种情况,你就不能调用一个新的意图


我不知道为什么这是您的性能问题。你能更详细地介绍一下activity1正在做什么吗?你在做大量的网络交流吗?是否可以缓存存储结果

在Activity1中,您将Web视图定义为:

private static WebView webView = null;
onCreate()
中,仅当它为空时才创建它:

if(webView == null){
  //create webview and load from network
}

明智地使用此方法,因为如果您指向其他活动中的对象,或者指向可能保持活动状态的对象(可运行文件、消息等),则很容易导致内存泄漏,你不能用主活动的活动上下文实例化它,并用它来恢复主活动而不破坏和重新创建它吗?检查这个线程,它和你的一样,希望它能帮助你好Jerad,我在Activity1中加载了一个WebView,来自网络连接的数据。所以,每次我从MainActivity进入Activity1。我不想重新加载网络视图,也不想重新加载网络中的数据。也许这会有帮助?斯科特:谢谢你的链接。此时,我要考虑的主要问题是我是否可以从恢复状态而不是oncreate状态第二次调用该活动Hi Luis,每当Activity1启动时,当再次调用oncreate时,webview将初始化为null。如果我错了,请更正。webview应该是全局的,在oncreate()之外定义。当您启动应用程序时(而不是使用activity1 start),它将仅用null初始化一次。当activity1第一次启动时,变量已初始化为null。当它第二次启动时,变量将具有第一次执行后的剩余值。