【问题标题】:Android Java onCreateAndroid Java onCreate
【发布时间】:2020-05-11 15:24:18
【问题描述】:

所以我关注了 Google 的第一个 Android 应用示例。如果我点击发送按钮,它会打开DisplayMessageActivity。但是在从 DisplayMessageActivity 中点击后退按钮(左箭头)时,MainActivityonCreate(Bundle savedInstanceState) 再次被调用。看起来它创建了一个MainActivity 的新实例。我可以通过在MainActivityonCreate 中设置一个布尔值来验证这一点,它没有被保留。

如何回到MainActivity(调用者)的上一个实例?

【问题讨论】:

    标签: java android android-lifecycle oncreate


    【解决方案1】:

    你应该看看Androids Activity Lifecycle

    如果你想再次访问activity的状态,我建议使用方法

    public void onSaveInstanceState(Bundle outState)

    保存当前状态。

    在此方法中检索以前保存的值:

    public void onRestoreInstanceState(Bundle savedInstanceState)`

    可以找到一个例子here

    【讨论】:

    • onSaveInstanceState 从未被调用过。所以 onCreate 中的 if (savedInstanceState != null) 没有发生。
    • hmm,应该在Activity被销毁时调用onSaveInstanceState方法。正如你所说,如果方法onSaveInstanceState 永远不会被调用,onCreate 中的参数将是null。您确定使用 @Override 注释正确编写了 OnSaveInstanceState(在 MainActivity 中)吗?
    【解决方案2】:

    您可以在后退箭头视图的 onClickListener 中调用 finish()。它将完成 DisplayMessageActivity 并且您将返回到调用者活动(在您的情况下为 MainActivity)。

    类似:

    backArrow.setOnClickListener(new View.OnClickListener() {
       @Override
       public void onClick(View v) {
           finish();
       }
    });
    

    【讨论】:

      【解决方案3】:

      看起来它创建了一个新的 MainActivity 实例。

      是的,我认为,这是很正常的行为。

      基本上,Android 操作系统一次只保留一个 Activity,以便尽可能多地释放内存资源。

      您应该使用understanding about such lifecycle concepts 来设计您的应用程序。

      您可以通过某些方式(ParcelableBundleSharedPreferences 等)保存 Activity 的某些状态。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多