【问题标题】:Android: How to get back to the Calling Activity without using finish()Android:如何在不使用finish()的情况下返回调用活动
【发布时间】:2012-10-09 00:03:48
【问题描述】:

我使用以下方法从名为 MainActivity 的 Activity 中调用名为 Activity1 的 Activity:

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。

【问题讨论】:

  • 对此不是 100% 确定,但是:当您第一次启动 Activity1 时,您不能使用 Main Activity 的 Activity 上下文实例化它并使用它来恢复 Main Activity 而不会破坏和重新创建它吗?跨度>
  • 查看这个帖子,和你的一样,希望对stackoverflow.com/questions/12789648/…有帮助

标签: android android-activity


【解决方案1】:

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

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

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

【讨论】:

  • 嗨 Jerad,我从 Activity1 中的网络连接加载了一个 WebView,数据。所以,每次我从 MainActivity 转到 Activity1。我不想重新加载 webview 以及来自网络的数据。
  • 斯科特:感谢您的链接。这时候,我看的重点是我是否可以从恢复状态而不是 oncreate 状态第二次调用活动
【解决方案2】:

在 Actitity1 中,您将 WebView 定义为:

private static WebView webView = null;

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

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

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

【讨论】:

  • 嗨 Luis,每次 Activity1 启动时,当再次调用 oncreate 时,webview 将被初始化为 null。如果我错了,请纠正我。
  • webview 应该是全局的,在 oncreate() 之外定义。当您启动应用程序时(而不是使用 activity1 启动),它将只用 null 初始化一次。当activity1第一次启动时,变量已经初始化为null。第二次启动时,变量将保留第一次执行时剩余的值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多