zoukankan      html  css  js  c++  java
  • 深入Activity生命周期(一)

        刚学Android的同学必须要掌握的四大组件是activity service broadcastReceiver provider,而activity是有界面的,需要在不同的阶段做不同事情。因此深刻理解activity的生命周期至关重要。大家都很想理解这其中奥秘,下面就分3篇来深入探寻activity生命周期。

       下面这张图应该大家都会熟悉的:

        当一个Activity启动的时候 首先会调用onCreate()方法,一般我们在这里完成一些初始化的工作;

        然后调用onStart()方法,这个方法只能被父类调用,如果手动调用则会出异常。onStart()方法必须是在onCreate()之后被调用或者Acitvity被stopped以后才被父类调用。

               通常是都是在onCreate()方法或者是onReStart()方法后执行。因为如果Activity不存在,在onCreate()以后必须要onStart(),Activity才能起来,而如果是Activity

               被stop了以后,Activity需要重新启动,那么由系统调用onStart()方法。

       然后调用onResume()方法,这时候Activity的是完全可视的,处于与用户交互状态。

       如果这时候有其他的应用弹出来,遮住了Activity的部分界面,那么就会调用onPause()方法,暂停Activity。

       如果其他应用完全的把Activity遮住了以后,那么就会调用onStop方法。

       如果系统系统回收了Activity,或者调用finish()方法,那么就会调用onDestroy()方法,该Activity就要被完整的回收了,释放资源和空间。

       当然图中其中还有其他的几种分支情况,没有全部都说到。

       下面以一个实际例子来说明Activity生命周期:

       假设现在你打算玩 愤怒的小鸟,安装好apk,点击图标,这时候Activity要调用onCreate()方法,在这个方法中完成初始化UI控件,由于Activity是UI线程,顺序执行onStart()方法,这个方法中要做一些与用户交互界面需要准备的数据以及图像的工作,万事俱备了,执行onResume()方法,这时候你看到的是愤怒的小鸟的界面,

         

        进入的游戏中,今天你手很热,都过了第8关了,已经发送了第一支小鸟了,眼见就要创新记录了,

        这时候很不巧,你的女朋友给你发了一条短信问你:hi,在干吗呢?。手机的顶部就会有一条提示,把顶部的提示拉下来一半,没有完全挡住 愤怒的小鸟 的界面 ,发现能完全看得到信息内容了,但是然后你决定不理她,继续玩,把顶部的提示放回去,又过了一关。

             

               这个过程就会调用onPause()方法。然后然后调用了onResume()方法。

        这时候女朋友发现你没有回信息,于是给你打电话过来了,系统会自动的优先电话程序给你切到打入电话,然后出现接电话的界面,那么这个过程中会依次的调用onPause(),和onStop()方法。

        当你打完电话了(在电话中声泪俱下 痛哭流涕 发自内心认错 保证以后一定及时回复信息,并且下午带她去吃大餐),按home键切回来愤怒的小鸟时,发现程序还是在第9关,而且也是在才发射了一只小鸟的状态。

     

      具体分析生命周期流程,有以下两种:

             1)  如果系统没有回收掉Activity 愤怒的小鸟,那么系统经过的流程是onRestart(),onStart(),onResume(),然后就是你看到的界面了。         

             2) 如果你打电话的时候很长,系统认为Activity需要回收的时候就会把 愤怒的小鸟回收掉,释放资源,这时候当你按home键切回来愤怒的小鸟,系统会调用onCreate(),

                    onStart(),onResume(),然后就是你看到的Activity界面了。

        打完电话以后,考虑到要马上动身带她去吃大餐,决定关闭程序,你选择了menu,退出按钮,这时就会调用finish(),然后onDestroy(),就是一个完整的退出了。

      注:

       当然事实上的愤怒的小鸟不是我说的这么简单的,里面有更复杂也有更多的图像处理,我只是单从生命周期以自己的理解给大家做个分享,别喷。。。

       有说的不对的地方,请给我留言,谢谢。

               

      

  • 相关阅读:
    MongoDB的基本操作
    Python 进阶 之 协程
    sublime text3 3143 注册码
    git add 文档
    Corosync 配置描述
    Centos 7 设置 DNS
    2017百度春招<度度熊买帽子的问题>
    leetcode 160. Intersection of Two Linked Lists
    leetcode 155. Min Stack
    leetcode 141 142. Linked List Cycle
  • 原文地址:https://www.cnblogs.com/xilinch/p/2615645.html
Copyright © 2011-2022 走看看