0

我使用以下方法从名为 MainActivity 的 Activity 中调用名为 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 时。开始正常的活动生命周期。即 onCreate() 被调用等等。

当我在控件处于 Activity1 时单击后退按钮时。调用完成方法,该方法又调用 onDestroy(),现在控件返回到 MainActivity 屏幕。

@Override
public void onBackPressed() {
        Log.d(TAG, "onBackPressed()");
        finish();
    }

下次我打电话给 Activity1。当我从上一次调用中调用 onDestroy(当我按下后退按钮时)时,再次调用 onCreate。

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

我正在寻找的要点是,当我第一次调用它时,我是否可以从恢复状态而不是 oncreate 启动activity1。

4

2 回答 2

1

我认为您不需要在 onBackPressed 上调用“finish()”方法。当您按下后退按钮时,Android 会为您执行此操作。onBackPressed 用于最后整理(将内容保存到共享首选项等)。

Android 默认行为是在屏幕上放置新活动时调用 onCreate。如果不发生这种情况,您将无法调用新的 Intent。

我不确定为什么这对您来说是性能问题。你能更详细地介绍一下activity1在做什么吗?您是否在进行繁重的网络通信?是否可以缓存存储结果?

于 2012-10-09T00:23:08.957 回答
0

在 Actitity1 中,您将 WebView 定义为:

private static WebView webView = null;

只有在onCreate()它为空时才创建它:

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

明智地使用这种方法,因为如果您指向其他活动中的对象或可能保持活动状态的对象(可运行对象、消息等),它可能很容易导致内存泄漏。

于 2012-10-09T00:53:50.227 回答