Activity生命周期和启动模式

Activity的生命周期

平时开发过程中大家习惯将一些初始化方法或者销毁资源的方法写在activity的生命周期方法中,那么今天就来重新再学习下activity的生命周期。

首先惯例上一张官网的生命周期简化说明图


生命周期简化说明

这张图上很清楚的表明了这些生命周期的调用顺序。在实际的开发过程中我们可能不需要去重写每一个方法,但是理解每一个方法意义和用途是至关重要的。

onCreate()

必须实现的一个方法,当系统创建Activity的时候就执行此方法,在整个生命周期中只执行一次,可以在里面执行一些数据绑定等操作。完成onCreate()方法后,Activity进入到启动状态,接下来将快速的调用onStart()和onResume()方法

onStart()

Activity进入到启动状态的时候,系统将会调用此方法,使Activity对用户可见。

onResume()

activity进入到前台,进入到onResume()方法之后,程序会一直保持这个状态,直到有其他的应用进入到前台

onPause()

当activity不在前台的时候调用此方法,比如有电话进来或者其他活动。在多窗口模式中,只要activity部分可见且不在焦点中,就会处于此状态

onStop()

调用此方法的时候activity对用户不可见。可以在此方法中释放或者调整不需要的资源,或者可以对一些信息进行持久化操作。

onDestory()

在销毁Activity之前调用的方法,调用finish()或者由于配置更改(如设备旋转或多窗口模式),系统暂时销毁Activity。这里要释放掉所有资源。

其实关于“可见”和“前台”一直疑问,应该是activity在前台的时候一定可见,但可见不一定在前台,“可见”可以理解为activity已经加载出来了,但是有可能被其他的页面覆盖掉处于后台状态(来自android 开发艺术探索)比如activity可见,但是被dialog覆盖,这个时候应该是认为可见但不在前台

Activity的异常生命周期

上面说完了Activity正常的生命周期,下面来看下Activity被异常终止的情况。

Activity配置改变

比如activity横竖屏的改变,语言的改变
Activity 中有两个方法,分别是onSaveInstanceState和onRestoreInstanceState,其中onSaveInstanceState的作用是Activity异常销毁时,会存储数据,当再次启动这个activity的时候,会从onRestoreInstanceState方法中拿到之前存储的数据,当然也可以从onCreate中拿到数据,但是这里注意需要判空,推荐使用onRestoreInstanceState,下面看下代码

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        if (savedInstanceState != null) {
            String s = savedInstanceState.getCharSequence("save_state", "").toString();
            Log.d(TAG, "onCreate: " + s);
        }

    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putCharSequence("save_state", "保存的数据");
    }

    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
        String s = savedInstanceState.getCharSequence("save_state", "").toString();
        Log.d(TAG, "onRestoreInstanceState: " + s);

    }

看下log:

2019-04-02 21:47:13.153 3471-3471/com.example.myapplication D/LoginActivity: onCreate: 保存的数据
2019-04-02 21:47:13.165 3471-3471/com.example.myapplication D/LoginActivity: onRestoreInstanceState: 保存的数据

注意这里的onSaveInstanceState方法只是保存临时数据,不能做数据的持久化

Activity的启动模式

首先来说下,Activity的启动模式一共有四种,分别是standard、singleTop、singleTask、singleInstance,我们都知道一个App中会有很多Activity ,这些Activity都是放在栈里面的,栈是一种数据结构,遵循着先进后出的原则,也就是说我们当前看到的Activity是在栈顶的,我们按下返回键就会将这个Activity从栈顶弹出。Activity的启动模式我们可以再AndroidManifest.xml进行配置,合理的利用Activity的启动模式有时候会给我们开发带来很多便利。

standard

这种模式使我们开发中最常见的,我们不用在清单文件中声明,默认的就是这种启动模式。在这种模式下,每当你启动一个activity,不管栈中有没有这个activity的实例,系统都会去重新创建一个activity的实例,也就是说这种模式下允许activity有多个实例。

singleTop

栈顶复用模式,也就是说当activity使用这种模式的时候,处于栈顶的activity不会被重建,也就是说不会走onCreate,onStart方法,但是会调用onNewIntent方法。注意如果这个activity如果不处于栈顶,那么这个activity依然会被重建

singleTask

栈内复用模式,单实例模式,只要activity在一个栈中存在,那么就不会创建这个activity,多次启动这个activity的时候也会调用onNewIntent方法。

singleInstance

顾名思义,这是一种单实例模式,其实这种模式除了拥有singleTask所有特性之外,还有一个特点就是只能单独的存在一个栈中

这只是一个概括,后续遇到问题再补充吧。。。。。

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

推荐阅读更多精彩内容