Activity生命周期

记得某一天面试,面试官问我activity的生命周期问题,这tm给我乐坏了,这还不简单?onCreate onStart onpause…每一个的作用都给他解释了一遍,他说恩!你说一下手机来电话时,手机关机时,开启别的应用时,横竖屏切换时候以及锁屏时的生命周期变化。我尼玛,我能告诉你我老师姓百吗?
面试的时候是没机会百度的!虽然问题简单,但是我相信这些问题并不是在看博客的你全能答对的,如果你都能答对,看到这你就可以关了!当我是菜鸟就好了,但是如果你不能,请跟我一起回顾一下基础吧!

我会用log输出的方式把activity生命周期给大家掰扯明白!
请允许我盗一张图!
这里写图片描述
这里我先不解释每个函数,我先把上图看到的所有函数全敲进去,看Log,这样更清晰。

/*=====================MainActivity=====================*/

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.i("Tag", "Run onCreate()");
    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.i("Tag", "Run onStart()");
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.i("Tag", "Run onPause()");
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.i("Tag", "Run onResume()");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.i("Tag", "Run onStop()");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.i("Tag", "Run onDestroy()");
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        Log.i("Tag", "Run onReStart()");
    }

这么多生命周期方法?我怎么记得住什么状态下执行什么呢?而且一执行就好几个!没关系,我告诉你一个方法,记住这两个词,一会儿会有用的哦!”假死”和”真挂了”。。假死就是没有被销毁,真挂了就是执行了onDestroy,真的被销毁了。OK,那继续看下面

我第一次打开程序的时候
这里写图片描述

================================

按Home键,这个没执行onDestroy,我理解为 “假死”
这里写图片描述
再次打开程序,因为没 “死”,所以不用onCreate,直接onRestart一下就开启了,然后onStart,onResume程序进入正在运行状态
这里写图片描述

================================

按返回键,这个是 “真挂了”
这里写图片描述
再次打开程序,因为刚才执行了Destroy,所以要重新创建onCreate,然后onStart,onResume,程序进入正在运行状态
这里写图片描述

================================

面试题:来电话的时候
当时那个面试官说APP应该先执行onStop,在执行onReStart,我真当他多牛B了,回来一测试,不会调用任何生命周期方法。我要是早知道,当时就得来一句,你TM忽悠谁呢?

===================================

别的程序打开时
你正用着当前应用,忽然你女朋友给你来微信了,你得赶紧看的。当你打开微信的时候,你也可以理解成你当前的应用”假死”了,生命周期和按Home键是一样的
onPause -> onStop , 再次打开或按返回键回到应用时
onRestart -> onStart -> onResume

===================================

当横竖屏切换时
这里你可以理解销毁了并重新创建了一遍应用
这里写图片描述
这时候,还会调用一个Activity里面的方法

    //当方向改变时onConfigurationChanged函数被调用  
    @Override
    public void onConfigurationChanged(Configuration newConfig)
    {
        super.onConfigurationChanged(newConfig);
        switch (newConfig.orientation) 
        {
            case Configuration.ORIENTATION_PORTRAIT://横屏时执行的东东
                break;
            case Configuration.ORIENTATION_LANDSCAPE://竖屏时执行的东东
                break;
        }
    }

===================================

锁屏时
到这就不用运行程序了,因为你可以猜到了
这个也是假死,假死就是和按home键执行的生命周期方法一样
锁屏时:onPaust -> onStop
解锁时:onRestart -> onStart -> onResume

关机时
这个有点变态,你愿意测你测去吧。。没什么实际意义!

===================================
还有你在当前Activity1打开Activity2时
Activity1:你可以理解成假死,onPause -> onStop
Activity2:相当于创建,onCreate -> onStart -> onResume

当按返回键时,就代表Activity2不需要了,这时候就直接干掉 “真挂了”
Activity2:onPause -> onStop -> onDestroy
Activity1:假死就不需要创建,那就onRestart -> onStart -> onResume

==================================

最后介绍两个函数onSaveInstanceState和onRestoreInstanceState
看这命名就知道是兄弟俩,配合用的!

onSaveInstanceState :”假死”的时候执行,就是跳转Activity时,按Home键时,内存不足被干掉时执行onSaveInstanceState,通常都会在这个方法里保存一下临时数据

onRestoreInstanceState:和上面的对应,在杀死后重新又回到此Activity时调用

=================================

到这块了,你应该能理解 “假死”和 “真挂了”的区别了,其实专业名词应该叫内存不足,杀死,回收这之类的,你面试的时候还是用专业名词比较好,我说这个是帮助你理解的!!!

最后总结一下概念:
1.启动Activity:系统会先调用onCreate方法,然后调用onStart方法,最后调用onResume,Activity进入运行状态。
2.当前Activity被其他Activity覆盖其上或被锁屏:系统会调用onPause方法,暂停当前Activity的执行。
3.当前Activity由被覆盖状态回到前台或解锁屏:系统会调用onResume方法,再次进入运行状态。
4.当前Activity转到新的Activity界面或按Home键回到主屏,自身退居后台:系统会先调用onPause方法,然后调用onStop方法,进入停滞状态。
5.用户后退回到此Activity:系统会先调用onRestart方法,然后调用onStart方法,最后调用onResume方法,再次进入运行状态。
6.当前Activity处于被覆盖状态或者后台不可见状态,即第2步和第4步,系统内存不足,杀死当前Activity,而后用户退回当前Activity:再次调用onCreate方法、onStart方法、onResume方法,进入运行状态。
7.用户退出当前Activity:系统先调用onPause方法,然后调用onStop方法,最后调用onDestory方法,结束当前Activity。

其实我感觉很多东西都是理解了,就好办了,没有必要按照一些书面语或者说是一些概念的东西学。这只是个人意见,我相信各位有更好的学习方法。

好,这篇文章到这就结束了,如有不懂或意见,欢迎QQ骚扰:997797281!以后会给大家带来更好的文章,谢谢支持!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值