Loading

Android必修课-Activity生命周期

Android Activity生命周期

简单理解Activity的管理机制

描述: Android的Activity可以理解为页面的最小操作对象,它采用的是一种任务栈来管理Activity的

​ Activity也可以理解为页面

  • 出栈:栈是我们非常熟悉的一种数据结构,先进后出是他的一个特性,而我们在栈里面是放入了许多个Activity,因此我的页面是层叠的,当我们将当前显示在屏幕上的Activity按下返回销毁的时候,Activity就会从我们的栈中pop出去,此时如果栈里面空了,则我们的应用会关闭,否则则会显示栈中栈顶的Activity在我们的屏幕中。

  • 入栈:出栈则是将当前的Activity压入栈顶,上一个栈顶的Activity则成为了栈顶下面的Activity,此时显示的则是在栈顶的Activity。还有一种情况就是,会显示多个Activity(页面),为什么会出现这种情况呢,那就是有一些Activity并非全屏显示,例如我们常见的Toast,还有一些对话框。

Activity的四种状态

  1. 运行状态

    当前Activity位于栈顶位置,上面我们说过栈顶的元素必然是在显示器上显示的。

    GC对运行状态的销毁优先级是最低的。

  2. 暂停状态

    这种情况就是我们描述的一种情况,即当前的Activity不处于栈顶,但依旧活跃可见,例如Toast,对话框下面的Activity。

    GC对运行状态的销毁优先级是比较低的。

  3. 停止状态

    当前Activity完全不可见,自然他也不会处于栈顶位置。

    GC对运行状态的销毁优先级是比较低的。

  4. 销毁状态

    当前Activity已经出栈,即在栈中被移除。

    GC对于此类Activity的回收优先级是最高的

Activity的七个生命周期钩子

  1. onCreate()

    见名思意,就是在第一次创建Activity的时候被调用,当你重写这个方法的时候,你就可以在创建Activity之前做一些自己的逻辑业务代码。

    建议:推荐一些初始化、样式、布局、事件绑定你可以在这里做

  2. onStart()

    这个方法是在 Activity 可见 ----> 不可见 时候调用。至于这个概念在上面有描述。

    你也可以理解为 (运行/暂停状态 ----> 停止/销毁状态)

  3. onResume()

    在用户和Activity交互之前调用(有些书里面会说是准备好交互式,我个人理解为交互前),这个时候当前的Activity一定出于栈顶。自然他的状态也就是处于运行状态

  4. onPause()

    在Activity 即将变成可见状态 之前调用(一般就是启动、或者是恢复Activity,总之此时的Activity即将变为可见状态)

    建议:一般我们在这里不能写过多的业务,这样会影响页面的显示时间,从而影响用户体验,我们可以在这里释放一些资源,以及保留一些关键数据。

  5. onStop()

    在Activity完全不可见之前调用,他与onPause()方法的区别在于:

    如果启动的新 Activity 是一个对话式的Activity,onPause()会执行,而onStop()不会

  6. onDestroy()

    在Activity销毁之前调用,此后Activity自然也就成为销毁状态,随时可能被GC回收

  7. onRestart()

    停止状态变为运行状态之前调用。

总结:

​ 如果是细心的同学,你会发现除了最后一个onRestart()方法之外的其他方法都是两两成对的。

于是我们有将7个生命周期钩子,组装了一下,分了一下时段,分别如下:

  • 完整的生命周期:

    onCreate() -------> onDestroy()  这个区间是一个完整的生命周期

    建议:一般我们在onCreate()做一些初始化,在onDestroy() 做一些释放,然后根据业务需求在中间的生命周期钩子中做自己的业务需求。

  • 可见生命周期:

    onStart() -------> onStop()  这区间是一个可见的生命周期

    在这个生命周期区间中,我们都是Activity的资源都是基本存在的。

  • 前台生命周期:

    onResume()-------> onPause() 这区间是一个前台的生命周期

    在这个区间中,我们的Activity都是绝对可交互的,也就是可见的。

生命周期钩子图

posted @ 2020-12-21 17:18  gwsh  阅读(176)  评论(0编辑  收藏  举报