生命周期架构:
生命周期测试用例:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.i("life","oncreate is use");
}
@Override
protected void onStart() {
super.onStart();
Log.i("life","onStart is use");
}
@Override
protected void onResume() {
super.onResume();
Log.i("life","Resume is use");
}
@Override
protected void onSaveInstanceState(@NonNull Bundle outState) {
super.onSaveInstanceState(outState);
Log.i("life","onSaveInstanceState is use");
}
@Override
protected void onPause() {
super.onPause();
Log.i("life","onPause is use");
}
@Override
protected void onStop() {
super.onStop();
Log.i("life","onStop is use");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.i("life","onDestroy is use");
}
@Override
protected void onRestart() {
super.onRestart();
Log.i("life","onRestart is use");
}
}
在使用android写测试程序时,当运行模拟器,有可能将页面旋转后数据恢复初始化的情况,页面旋转生命周期调用情况:
为了解决这种情况,观察上图,我们可以在onSaveInstanceState(生命周期在stop和destory之间)对数据内容进行保存
列如,页面旋转后,保存某一个对象的内容状态:
protected void onSaveInstanceState(@NonNull Bundle outState) {
super.onSaveInstanceState(outState);
//保存当前分数
String now = tvScore.getText().toString();
outState.putString("score",now);
}
在入口进行判断和使用
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main)
tvScore = findViewById(R.id.tvScore);
if(savedInstanceState != null){
tvScore.setText(savedInstanceState.getString("score"));
}