安卓的生命周期管理大致分为:
从生到死的生命周期,对应方法为onCreate和onDestroy;
进出停止态,对应方法为onStart和onStop;
进出暂停态,对应方法为onResume和onPause。
现在以秒表APP场景为例,总结下三种状态的适用场景:
START开始计时,STOP停止计时,RESET从0计时。
从生到死生命周期为最大的生命周期管理,即一个活动从开始创建到消亡的状态,这时对应一个场景是:如果当安卓屏幕翻转时会依次调用onDestroy和onCreate,这时没有保存翻转前的状态,当想翻转后保存翻转前状态时可以调用onSaveInstanceState方法,当再次启用时取回计数值和是否重置的布尔值。
相关代码为:
java">protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if(savedInstanceState != null){ //之前的状态
seconds = savedInstanceState.getInt("seconds");
running = savedInstanceState.getBoolean("running");
wasRunning = savedInstanceState.getBoolean("wasRunning");
}
runTimer(); //定时器任务,定时取出Seconds值
}
public void onSaveInstanceState(Bundle savedInstanceState){
super.onSaveInstanceState(savedInstanceState);
savedInstanceState.putInt("seconds",seconds);
savedInstanceState.putBoolean("running",running);
savedInstanceState.putBoolean("wasRunning",wasRunning);
}
进出暂停态的使用场景是当按HOME键后APP进入后台,APP暂停计时;当返回前台时继续计时,也需要保存之前的状态值。
相关代码为:
java">protected void onStart() {
super.onStart();
if(wasRunning){
running = true;
}
}
protected void onStop() {
super.onStop();
wasRunning = running;
running = false;
}
进出暂停态的使用场景是当手机可以分屏使用,APP失去焦点后但仍可见,这时需要将APP暂停,当重新获得焦点后继续计时,此种状态为最小的状态。相关代码为:
java">protected void onResume() {
super.onResume();
if(wasRunning){
running = true;
}
}
protected void onPause() {
super.onPause();
wasRunning = running;
running = false;
}
总结:
从生到死的生命周期为大循环,代表从生到死的循环;
进出停止态为中循环,代表可见与消失的循环;
进出暂停态为小循环,代表获得与失去焦点的循环。
参考资料:
https://www.icourse163.org/learn/BFU-1205989803?tid=1450759471&from=study#/learn/content 移动开发技术MOOC课程