android Activity 生命周期浅谈

        Android生命周期方法是贯穿Android 程序运行始末的核心方法。Activity,Service,Fragment等一系列的Android核心组件,生命周期方法贯穿始终。但我在最近的面试中,发现很多从事android 原生开发2、3年的从业者居然连跳转的执行顺序都不能肯定,准确的说出来。所以就准备了这么一篇十分初级的问题作为本人技术文章的初片(‘第一次’就这么交代了)。下面我仅以Activity为例,描述下生命周期方法掉用的顺序和应注意的一些事宜。

    首先我们先看一张Activity标准的生命周期图:


    Activity作为Android 使用最多的组件,它的生命周期方法也是android coder信手拈来的基础基础。 众所周知周知,Android Activity的生命周期方法,onCreate(); onStart(); onResume(); onPause(); onStop(); onRestart(); onDestroy(); 7大方法。下面结合demo的日志输出,来准确的定位每个方法的执行位置和执行顺序。

    Activity启动顺序执行onCreate();、onStart();、onResume();方法。通过Android Developer官网可以准确的了解到onCreate();方法在Activity生命周期内只能执行一次,onStart();方法是用户可以看到当前Activity的状态变化回调,该状态下Activity 变更为交互化。onResume();方法是用户可以和当前Activity交互,及当前页面位于活动栈顶部。上述三个方法是 Activity启动必然顺序执行的3个方法。

    在onResume();方法后,用户即可以和Activity进行页面操作交互。实现跳转,输入等一系列交互事件,在界面跳转和前后台切换中会触发Activity其他几个生命周期方法,下面就来逐个介绍。

    onPause();该方法在Android 官网上描述为当前activity失去焦点,导致 Activity 暂停。例如:半透明Activity展示,Activity跳转。但是要特别注意的是:在Android 7.0的多窗口模式下运行时,仅有一个应用随时具备焦点;系统将暂停所有其他应用。该方法一般用于处理不应该在暂停状态下的继续执行的操作,或者需要将状态变化前的数据进行持久化存储。如:视频的状态处理。

    onStop();该方法在当前Activity对用户不可见时调用, 您接下来将收到onRestart(),onDestroy()或什么都没有,具体取决于以后的用户活动。其和onPause();方法的区别是该页面完全不可见时回掉,一个透明或者半透明activity 覆盖在当前Activity时,该方法不会被调用。

    onRestart();当当前Activity被重新显示给用户时会调用该方法,该方法时在onStop();之后调用,然后是onStart();然后是onResume();

    onDestroy();在销毁活动之前执行最终的清理,该方法一般是我们调用了finish();方法或者当前Activity 被系统暂时销毁2种情况。我们在该方法中处理好我们的数据和资源调用,解决内存泄漏等一些影响性能的问题。

    下面我们来看一下App启动 通过系统Launcher进程,通知AMS(Activity Manager Service)启动对应点击App的启动Activity,也就是其在AndroidManifest.xml中设置的启动Activity。下面来看下demo输出的日志:

2019-03-26 15:31:37.749 27331-27331/com.zjp.test E/ZJP: onCreate: -------------MainActivity 

2019-03-26 15:31:13.147 3755-3755/com.zjp.test E/ZJP: onStart ------------- MainActivity

2019-03-26 15:31:13.153 3755-3755/com.zjp.test E/ZJP: onResume ------------- MainActivity

    接下来 我们进行跳转操作, 在MainActivity 点击Button 跳转SecondActiviy中 demo输出的日志:

2019-03-26 16:31:37.749 27331-27331/com.zjp.test E/ZJP: onPause --------- MainActivity 

2019-03-26 16:31:37.794 27331-27331/com.zjp.test E/ZJP: onCreate: --------- SecondActivity

2019-03-26 16:31:37.795 27331-27331/com.zjp.test E/ZJP: onStart --------- SecondActivity

2019-03-26 16:31:37.799 27331-27331/com.zjp.test E/ZJP: onResume --------- SecondActivity

2019-03-26 16:31:38.136 27331-27331/com.zjp.test E/ZJP: onStop --------- MainActivity

需要注意的是:MainActivity 的onStop();方法是在SecondActivity的onResume();方法执行后才调用的。

    继续操作,我们在SecondActivity 中放置一个Button,点击调用finish();方法。其日志输出如下:

2019-03-26 16:32:38.136 27331-27331/com.zjp.test E/ZJP: onPause ---------- SecondActivity 

2019-03-26 16:32:38.219 27331-27331/com.zjp.test E/ZJP: onRestart ------------- MainActivity

2019-03-26 16:32:38.220 27331-27331/com.zjp.test E/ZJP: onStart ------------- MainActivity

2019-03-26 16:32:38.221 27331-27331/com.zjp.test E/ZJP: onResume ----------- MainActivity 

2019-03-26 16:32:38.551 27331-27331/com.zjp.test E/ZJP: onStop ----------- SecondActivity

2019-03-26 16:32:38.551 27331-27331/com.zjp.test E/ZJP: onDestroy ---------- SecondActivity

其执行过程,先执行了SecondActivity的onPause();方法,然后是执行了MainActivity的onRestart();、onStart();、onResume();方法,最后又执行SecondActivity的onStop();和onDestroy();方法,完成了SecondActivity的销毁。

    最后,该问题很简单,但是又是android原生Activity执行的根基,在招聘过程中,问了多个从业人员,感觉回答的都很没有底气。所以简单的完成了一个demo阐述说明下,androidActivity跳转生命周期方法执行顺序。本人文笔拙劣,构词不严谨,若有不当,希望各位道友不吝赐教。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 今天和大家讨论一下Android中Activity的生命周期,虽然网上有很多文章都有介绍,但是大多解释的不是很详尽...
    弱小口阅读 395评论 0 0
  • Android的开发中我们大部分都是和Activity打交道,而想很好的运用Activity首先必须要清楚Acti...
    云天随笔阅读 1,330评论 0 1
  • 普通的Activity跳转生命周期变化 MainActivity 启动 D/LUtil: MainActivit...
    AFatty阅读 511评论 0 0
  • 指定首次启动的Activity 必须在manifest使用包括 MAIN action 与 LAUNCHER ca...
    拙峰朽木阅读 585评论 1 0
  • 01 有一个非常著名,大家耳熟能详的“棉花糖实验”,实验大概内容是说,实验者给4岁的被试儿童每人一颗棉花糖,并告诉...
    赖雄伟阅读 1,527评论 2 4

友情链接更多精彩内容