zoukankan      html  css  js  c++  java
  • 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都是绝对可交互的,也就是可见的。

    生命周期钩子图

  • 相关阅读:
    自学Zabbix3.6.4-触发器triggers dependencies依赖关系
    自学Zabbix3.6.3-触发器triggers expression表达式
    TSLint提示错误
    angular4.0 配置打包路径以及资源文件404问题
    angular4.0配置本机IP访问项目
    angular4.0如何引入外部插件2:declare方案
    angular4.0如何引入外部插件1:import方案
    angular4.0中form表单双向数据绑定正确姿势
    angular4.0单个标签不能同时使用ngFor和ngIf
    angular4.0使用JSONP数据请求
  • 原文地址:https://www.cnblogs.com/shundong106/p/14168957.html
Copyright © 2011-2022 走看看