[英]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.