首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >onRestoreInstanceState的使用

onRestoreInstanceState的使用
EN

Stack Overflow用户
提问于 2019-11-25 15:41:20
回答 3查看 112关注 0票数 0

我有一个活动,当我按“主页”按钮时,我有下一个活动生命周期:

代码语言:javascript
复制
   D/States: Login: onPause()
   D/States: Login: onStop()
   D/States: onSaveInstanceState
   D/States: Login: onDestroy()

当我再次输入我的申请时,我有:

代码语言:javascript
复制
D/States: Login: onStart()
D/States: Login: onResume()
D/States: Login: onPause()
D/States: Login: onResume()

但是没有调用onRestoreInstanceState()方法,也没有保存活动状态。

重写:

代码语言:javascript
复制
@Override
    protected void onStart() {
        super.onStart();
        Log.d(TAG, "Login: onStart()");
    }

    @Override

    protected void onResume() {
        super.onResume();
        Log.d(TAG, "Login: onResume()");
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.d(TAG, "Login: onPause()");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.d(TAG, "Login: onStop()");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.d(TAG, "Login: onDestroy()");
    }
    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putString("login", mEmailView.getText().toString());
        outState.putString("password", mPasswordView.getText().toString());
        Log.d(TAG, "onSaveInstanceState");
//        super.onSaveInstanceState(outState);
    }
    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
        mEmailView.setText(savedInstanceState.getString("login"));
        mPasswordView.setText(savedInstanceState.getString("password"));
        Log.d(TAG, "onRestoreInstanceState");

    }

如我所知,onRestoreInstanceState()方法应该在onResume()onStart()中调用。

我在谷歌的某个地方读到了关于configChanges的文章,同时也在寻找我的问题的答案。我的舱单里没有android:configChanges="keyboardHidden|orientation"或其他android:configChanges

,但为什么在我的活动中没有调用它呢?解决了。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-11-26 06:25:44

不是复制品..。

好的。

早些时候,当应用程序被最小化时,我需要以任何方式破坏其他一些活动。所以我用了android:noHistory

当然,我用复制粘贴创建了“登录”活动,并忘记删除noHistory

票数 0
EN

Stack Overflow用户

发布于 2019-11-25 16:01:55

从正式文件:

这个方法在onStart()之后调用,当活动从以前保存的状态重新初始化时,在savedInstanceState中给出。大多数实现只需使用onCreate(Bundle)来恢复它们的状态,但有时在完成所有初始化或允许子类决定是否使用默认实现之后,在这里这样做是很方便的。此方法的默认实现执行onSaveInstanceState(Bundle)先前冻结的任何视图状态的还原。

由于内存限制,活动在更改方向后重新初始化,或者在被OS杀死后重新创建。

在您的情况下,按下home按钮,活动就会转到停止状态,除非您的手机缺少内存等资源,然后被OS杀死,在这种情况下,将调用onRestoreInstanceState()

票数 0
EN

Stack Overflow用户

发布于 2019-11-25 16:15:14

当您按“主页”按钮时,您的活动不会被破坏或重新创建。当你从最近的应用中把它带回来的时候,这个活动就会启动,并且不会被重新创建,除非它被操作系统杀死,以便在内存不足的情况下恢复内存。它的行为不出所料

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59035381

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档