安卓开发系列 之生命周期管理

安卓的生命周期管理大致分为:
从生到死的生命周期,对应方法为onCreate和onDestroy;
进出停止态,对应方法为onStart和onStop;
进出暂停态,对应方法为onResume和onPause。

现在以秒表APP场景为例,总结下三种状态的适用场景:
START开始计时,STOP停止计时,RESET从0计时。
在这里插入图片描述

从生到死生命周期为最大的生命周期管理,即一个活动从开始创建到消亡的状态,这时对应一个场景是:如果当安卓屏幕翻转时会依次调用onDestroy和onCreate,这时没有保存翻转前的状态,当想翻转后保存翻转前状态时可以调用onSaveInstanceState方法,当再次启用时取回计数值和是否重置的布尔值。
相关代码为:

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暂停计时;当返回前台时继续计时,也需要保存之前的状态值。
相关代码为:

protected void onStart() {
    
    
        super.onStart();
        if(wasRunning){
    
    
            running = true;
        }
    }

protected void onStop() {
    
    
        super.onStop();
        wasRunning = running;
        running = false;
    }

进出暂停态的使用场景是当手机可以分屏使用,APP失去焦点后但仍可见,这时需要将APP暂停,当重新获得焦点后继续计时,此种状态为最小的状态。相关代码为:

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课程

猜你喜欢

转载自blog.csdn.net/langxiaolin/article/details/113877760