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跳转生命周期方法执行顺序。本人文笔拙劣,构词不严谨,若有不当,希望各位道友不吝赐教。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,126评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,254评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,445评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,185评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,178评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,970评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,276评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,927评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,400评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,883评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,997评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,646评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,213评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,204评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,423评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,423评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,722评论 2 345

推荐阅读更多精彩内容

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