他们的意思是,当 Activity 在“配置更改”或“系统启动的进程死亡”之后恢复时,您可以使用多个来源来检索数据,以便像以前一样设置它,例如:
- 在 Activity 被终止之前存储在
savedInstanceState 包中的任何内容。
- 首先用于启动活动的
Intent 中存储的任何内容。同样的Intent 在活动被杀死后仍然可用并且
已恢复。
例如,假设您有一个 UserProfile 活动,显示有关当前用户的信息。当您从其他活动启动UserProfileActivity 时,您可以在Intent 中包含有关用户的信息:
// Create Intent to start the `UserProfileActivity`
final Intent intent = new Intent(this, UserProfileActivity.class);
intent.putExtra("first_name", "John");
intent.putExtra("last_name", "Doe");
// Launch the intent
startActivity(intent);
然后在UserProfileActivity 中您可以检索该信息:
// Get the intent that was used to launch this activity
final Intent = getIntent();
// Get the required info from the intent
final String firstName = intent.getStringExtra("first_name");
final String lastName = intent.getStringExtra("last_name");
// Update the UI
TextView tvName = findViewById(R.id.userName);
tvName.setText(firstName + " " + lastName);
现在说UserProfileActivity 有一个“关于你” EditText 字段和一个“保存” 按钮,它将把 EditText 的内容存储在他们的配置文件中。
当用户决定旋转屏幕时,他们正在“关于你” EditText 中写入内容。活动被杀死,但他们还没有点击“保存”按钮!他们写的所有东西都丢失了=不满意的用户!
我们如何才能创造更好的用户体验?当UserProfileActivity 即将被杀死时,onSaveInstanceState() 将被调用,因此将 "About You" EditText 的当前内容保存在 savedInstanceState 包中,并在活动时恢复它被重新创建。
@Override
protected void onSaveInstanceState(Bundle outState) {
// Store relevant state variables
final EditText etAboutYou = findViewById(R.id.aboutYou);
outState.putString("about_you", etAboutYou.getText().toString());
super.onSaveInstanceState(outState);
}
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_user_profile);
// Restore saved state if required
if (savedInstanceState != null) {
final String aboutYou = savedInstanceState.getString("about_you");
final EditText etAboutYou = findViewById(R.id.aboutYou);
etAboutYou.setText(aboutYou);
}
}