Activity生命周期中我们可以做些什么?

一个Acitivity是一个应用的程序组件,提供一个屏幕,用户可以用来交互完成某些任务.

一个应用通常由多个Activity组成.

那么在交互的过程中,必然会存在交互的各种状态,那么这些状态在整个Activity中我们应该如何控制,以及在这个过程中我们可以做些什么,在哪里做呢?


Activity的生命周期可以按官方所提供这张图来理解



接下来我直接在代码中记录和整理可以在Activity生命周期中我们可以做些什么.


<span style="font-size:18px;">public class MainActivity extends AppCompatActivity {

    //Activity被创建时调用
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        /**
         * 1,Activity一被创建便会执行onCreate方法创建,仅会在第一次创建时调用
         *
         * 2,如果在onSaveInstanceState()方法中曾记录过Activity的状态,savedInstanceState中会保存以前的状态.
         *
         * 3,之后执行onStart()方法;
         *
         * 此方法是做所有初始化设置的地方,创建视图,绑定数据等.
         */
    }

    //Activity由不可见变为可见时调用
    @Override
    protected void onStart() {
        super.onStart();
        /**
         * 1,随着程序是否为用户可见被多次调用
         *
         * 2,从onStart到onStop 为整个Activity的可视生命周期,
         *
         * 3,之后执行onResume()方法;
         *
         * 可以在此进行注册BroadcastReceiver来监控影响UI的改变.或加载一些资源等.
         */
    }

    //Activity可见时就会被调用
    @Override
    protected void onResume() {
        super.onResume();
        /**
         * 1,此时我们获得焦点可与用户进行交互
         *
         * 2,前台的生命周期自onResume()直到onPause()为止.在此期间Activity总是可见的.
         *
         * 3,此时的Activity一定是位于栈顶的.并接受用户的输入.
         *
         * 4,Activity会经常在暂停与恢复之间进行状态转换.
         *
         * 之后总会执行onPause()方法;
         */
    }

    //Activity可见不可操作时被调用
    @Override
    protected void onPause() {
        super.onPause();
        /**
         * 1,当Activity准备去启动另一个Activity时.
         *
         * 2,可以在此方法中将未保存的数据进行持久化,或释放掉一些消耗CPU的资源(比如动画)
         *
         * 3,此方法中执行速度一定要快,下一个活动会等待此方法执行完才会执行.
         *
         * 当Activity回到前台执行onResume();
         * 当Activity变为不可见时执行onStop();
         */
    }

    //Activity完全不可见时被调用
    //退出当前Activity或者跳转到新Activity时被调用
    @Override
    protected void onStop() {
        super.onStop();

        /**
         * 1,停滞状态,此时Activity完全不可见,从可见到完全不可见之时被调用
         *
         * 2,从onStart到onStop 为整个Activity的可视生命周期,随着程序是否为用户可见被多次调用
         *
         * 3,如果我们在onStart中注册了BroadcastReceiver,可在此方法中进行取消注册.或释放一些资源.
         *
         * 4,从而保证停滞的Activity占用更少的内存
         *
         * 如果再次回到前台与用户进行交互则执行onRestart()方法.
         * 如果关闭销毁Activity则执行onDestroy()方法;
         */
    }

    //Activity从后台重新回到前台时被调用
    @Override
    protected void onRestart() {
        super.onRestart();
        /**
         * 重新开始
         * 此时Activity由完全不可见变为可见之前会被调用(onStop-onRestart-onStart之间被调用)
         * 在Activity停止后,在再次启动之前被调用
         *
         * 之后总会执行onStart()方法;
         */
    }

    //退出当前Activity时被调用,调用之后Activity就结束了
    @Override
    protected void onDestroy() {
        super.onDestroy();
        /**
         * 1,销毁Activity之前会被调用
         *
         * 2,可以在此方法中进行资源的释放以节省内存等.
         *
         * 可以使用isFinishing()方法区分Activity是被系统销毁或Activity正常结束.
         */
    }

    //Activity窗口获得或失去焦点时被调用
    @Override
    public void onWindowFocusChanged(boolean hasFocus) {
        super.onWindowFocusChanged(hasFocus);
        /**
         * 1,在可否与用户交互之间调用
         *
         * 2,可在此方法中获取视图组件的尺寸大小.
         *
         * 3,总是在onResume之后或onPause之后被调用
         */
    }

    /**
     * Activity被系统杀死时被调用.
     */
    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        /**
         *  例如:
         *  1,屏幕方向改变时,Activity被销毁再重建;
         *  2,当前Activity处于后台,系统资源紧张将其杀死.
         *  3,另外,当跳转到其他Activity或者按Home键回到主屏时该方法也会被调用,系统是为了保存当前View组件的状态.
         *  4,在onStop之前被调用也可能在onPause()之前.
         *  tip: 官方文档为it does so before onStop() and possibly before onPause()..
         *<span style="white-space:pre">	</span>
         *  通常在此方法中保存Activity的一些临时状态.
         */
    }

    /**
     * Activity被系统杀死后再重建时被调用.
     */
    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
        /**
         * 例如:
         * 1,屏幕方向改变时,Activity被销毁再重建之时;
         * 2,当前Activity处于后台,系统资源紧张将其杀死,用户又启动该Activity.
         * 3,这两种情况下onRestoreInstanceState都会被调用,在onStart之后.
         *
         * 在此方法中我们可以进行一些数据的恢复.
         */
    }
}</span>


简单总结一下


一个完整的Activity生命周期,从第一次调用onCreate()开始直到调用onDestroy()为止.


因为方法比较多那么我们可以进行最基本的分类


一,Activity的可见的生命周期

onStart()-onResume()-onPause()-onStop();


1,可与用户交互状态 

onResume();

2,不可与用户交互状态(可以看见但不能进行操作,比如被另一个透明的Activity所覆盖)

onPause();


二,Activity处于用户不可见的状态


 onStop(); 处在不可见状态的Activity处于停滞状态.


Activity中还有更为细节的方法以及在这些方法中我们可以做些什么操作,个人认为更多的用法需要结合实际的需求与需要,并不是全部都用上就万无一失的,何时用,怎么用更是需要在长期使用中切身体会的.更多的是体会google如此设计的初衷以及学习其思考方式.


学习参考自:

基础总结篇之一:Activity生命周期

Google官方文档(需翻墙)

感谢大牛的文章,学习到很多东西,个人能力有限,仅按个人学习的过程中做一些心得体会.

关于在onCreate()方法中获取Activity保存的状态还是在onRestoreInstanceState()方法中获取的区别可以学习Android开发之InstanceState详解这篇文章.




  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值