Android:如何在不使用finish()的情况下返回Calling Activity

时间:2012-10-09 00:03:48

标签: android android-activity

我使用以下命令从名为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中时单击后退按钮。调用finish方法,然后调用onDestroy(),现在控件返回MainActivity屏幕。

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

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

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

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

2 个答案:

答案 0 :(得分:1)

我不相信你需要打电话给#34;完成()" onBackPressed上的方法。当你按下后退按钮时,Android会为你做这件事。 onBackPressed用于持续小步舞整理(将内容保存到共享偏好等)。

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

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

答案 1 :(得分:0)

在Actitity1中,您将WebView定义为:

private static WebView webView = null;

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

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

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