我正在阅读有关用于跨配置更改和系统启动的进程死亡保留UI数据的不同方法。我碰到了这段我不敢说的话。
谁有人解释一下?
此外,当您从intent打开活动时,会在配置更改和系统恢复活动时将附加捆绑包传递给活动。如果在启动活动时将一个UI状态数据(例如搜索查询)作为intent extra传递,则可以使用extras bundle而不是onSaveInstanceState()包。
链接:https://developer.android.com/topic/libraries/architecture/saving-states
他们所说的是,当“配置更改”或“系统启动的进程死亡”之后恢复活动时,您可以使用多个源来检索数据,以便像以前那样进行设置:
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()
将被调用,因此保存savedInstanceState
包中“About You”EditText的当前内容,并在重新创建活动后恢复它。
@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);
}
}