繁体   English   中英

为什么用户输入没有通过 Android 10 上的 onRestoreInstanceState 恢复?

[英]Why user input isn't restored via onRestoreInstanceState on Android 10?

我有以下代码:

public class MainActivity extends AppCompatActivity {

    EditText edtInput;
    private static final String STATE_RESULT = "state_result";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        edtInput = (EditText) findViewById(R.id.edtInput);

    }

    @Override
    protected void onSaveInstanceState(@NonNull Bundle outState) {
        outState.putString(STATE_RESULT, edtInput.getText().toString());
        super.onSaveInstanceState(outState);

    }

    @Override
    protected void onRestoreInstanceState(@NonNull Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
        if (savedInstanceState != null){
            edtInput.setText(savedInstanceState.get(STATE_RESULT).toString());
        }
    }
}

在 Pixel 3(运行 Android 12)上:在 EditText 中输入一些内容,然后进行屏幕旋转组合,打开/关闭屏幕,按返回主页并再次打开应用程序。 用户输入仍在 EditText

在小米 Pocophone F1(运行 Android 10)上,行为略有不同:如果您按回并再次打开应用程序,则会清除 EditText。 但只要您只打开/关闭或旋转屏幕就没有问题。

不确定我是否误解了 Android 活动生命周期,或者这是操作系统上的错误。 任何帮助表示赞赏。

在您开始弄清楚它发生的原因之前,您需要弄清楚到底发生了什么。

您应该添加一些日志记录以查看失败的确切位置。 也许在 F1 上,应用在调用onSaveInstanceState()之前就被杀死了。 或者也许onRestoreInstanceState()savedInstanceState == null

@Override
    protected void onSaveInstanceState(@NonNull Bundle outState) {
        outState.putString(STATE_RESULT, edtInput.getText().toString());
        super.onSaveInstanceState(outState);
        Log.d("***", "Saved")
    }

@Override
    protected void onRestoreInstanceState(@NonNull Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
        Log.d("***", "Restoring: " + (savedInstanceState == null))
        if (savedInstanceState != null){
            edtInput.setText(savedInstanceState.get(STATE_RESULT).toString());
        }
    }

然后查看日志以查看使用后退箭头退出应用程序时 F1 上发生的情况,然后重新启动它

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM