热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

Android非异常情况下的Activity生命周期分析

这篇文章主要介绍了Android非异常情况下的Activity生命周期分析,帮助大家更好的理解和使用Android,感兴趣的朋友可以了解下

Activity非异常情况下的生命周期是指,用户正常参与UI交互的情况下,Activity所经过的生命周期的改变;一般情况下,Activity会经过以下几个生命周期。

1、OnCreate(): 表示Activity正在创建,这个是生命周期的第一个方法,该方法只调用一次,在这个方法中,一般做变量初始化的操作,例如绑定一个Button控件的Id等。

2、onRestart(): 表示Activity正在重新启动,一般情况下,如果最前面的Activity从不可见状态变为可见状态时,onRestart()这个方法都会被调用,一般情况下都是用户操作导致的;例如,当前这个Activity叫A,用户启动了一个新的Activity叫B,这时A就会暂停,也就是onPause()和 onStop()被调用了,接着用户又回到了这个A时,就会出现这种情况。

3、onStart(): 表示Activity正在被启动,将要开始,这时的Activity是可见状态了,但是没有出呈现到前台的,还不能和用户打交道,其实Activity已经显示出来了,只是我们看不到而已

4、onResume(): 表示Activity已经可见了,也就是呈现在前台上,即我们肉眼能够看得见了。我们要留意这个onResume()和onStart()的区别,onStart()和onResume()都表示是Activity的可见状态,但是调用onStart()方法时Activity是在后台,而调用onResume()方法时Activity是在前台的。

5、onPause(): 表示Activity正在停止,这时候Activity的状态是不可见的,但是还是显示在前台的;一般情况下,下一个生命周期的方法onStop()就会被调用。在这里可以做一些存储数据的操作,但不可以过于耗时,因为会影响Activity显示的效果。

6、onStop(): 表示Activity即将停止,这时候Activity的状态是不可见的,也不是显示在前台上了,在这里可以做一些稍微重量级的回收工作,也不可以太耗时。

7、onDestroy(): 表示Activity即将被销毁,这是Activity生命周期的最后一个方法,在这里可以做一些资源的释放。

下面以一张图展示非异常情况下生命周期调用的方法

好了,前面分析了那么多,我们来写一个小demo看一下效果。
(1)、首先创建第一个Activity,名叫ActivityA,代码如下所示:

var activityName: String? = "ActivityA"
 val TAG: String? = "Activity"
 override fun onCreate(savedInstanceState: Bundle?) {
   super.onCreate(savedInstanceState)
   setContentView(R.layout.activity_a)
   Log.d(TAG,activityName + "---------onCreate")
 }

 override fun onRestart() {
   super.onRestart()
   Log.d(TAG,activityName + "---------onRestart")
 }

 override fun onStart() {
   super.onStart()
   Log.d(TAG,activityName + "---------onStart")
 }

 override fun onResume() {
   super.onResume()
   Log.d(TAG,activityName + "---------onResume")
 }

 override fun onPause() {
   super.onPause()
   Log.d(TAG,activityName + "---------onPause")
 }

 override fun onStop() {
   super.onStop()
   Log.d(TAG,activityName + "---------onStop")
 }

 override fun onDestroy() {
   super.onDestroy()
   Log.d(TAG,activityName + "---------onDestroy")
 }

 public fun onClick(v: View) {
   var clazz = ActivityB:: class.java
   var it: Intent = Intent(this,clazz)
   startActivity(it)
 }

对应的ActivityA的activity_a.xml文件如下所示:

<&#63;xml version="1.0" encoding="utf-8"&#63;>

  
  

(2)、创建另外一个Activity,名叫ActivityB,如下所示:

val TAG: String&#63; = "Activity"
var activityName: String&#63; = "ActivityB"
override fun onCreate(savedInstanceState: Bundle&#63;) {
  super.onCreate(savedInstanceState)
  setContentView(R.layout.activity_b)
  Log.d(TAG,activityName + "---------onCreate")
}

override fun onRestart() {
  super.onRestart()
  Log.d(TAG,activityName + "---------onRestart")
}

override fun onStart() {
  super.onStart()
  Log.d(TAG,activityName + "---------onStart")
}

override fun onResume() {
  super.onResume()
  Log.d(TAG,activityName + "---------onResume")
}

override fun onPause() {
  super.onPause()
  Log.d(TAG,activityName + "---------onPause")
}

override fun onStop() {
  super.onStop()
  Log.d(TAG,activityName + "---------onStop")
}

override fun onDestroy() {
  super.onDestroy()
  Log.d(TAG,activityName + "---------onDestroy")
}

ActivityB对应的activity_b.xml的文件如下所示~~

 <&#63;xml version="1.0" encoding="utf-8"&#63;>
 
 

第一次运行的结果如下所示~~~~

以下是相应的日志打印

01-08 11:48:39.068 3021-3021/activitylifecycle.xe.com.activitylifecycle D/Activity: ActivityA---------onCreate
01-08 11:48:39.069 3021-3021/activitylifecycle.xe.com.activitylifecycle D/Activity: ActivityA---------onStart
01-08 11:48:39.069 3021-3021/activitylifecycle.xe.com.activitylifecycle D/Activity: ActivityA---------onResume

点击“点击此按钮,可启动新的Activity”按钮,效果图如下所示

相应的日志如下所示:

01-08 11:57:44.455 3021-3021/activitylifecycle.xe.com.activitylifecycle D/Activity: ActivityA---------onPause
01-08 11:57:44.465 3021-3021/activitylifecycle.xe.com.activitylifecycle D/Activity: ActivityB---------onCreate
01-08 11:57:44.466 3021-3021/activitylifecycle.xe.com.activitylifecycle D/Activity: ActivityB---------onStart
01-08 11:57:44.466 3021-3021/activitylifecycle.xe.com.activitylifecycle D/Activity: ActivityB---------onResume
01-08 11:57:44.843 3021-3021/activitylifecycle.xe.com.activitylifecycle D/Activity: ActivityA---------onStop

点击返回键,返回ActivityA,日志如下所示:

01-08 12:22:40.318 3021-3021/activitylifecycle.xe.com.activitylifecycle D/Activity: ActivityB---------onPause
01-08 12:22:40.319 3021-3021/activitylifecycle.xe.com.activitylifecycle D/Activity: ActivityA---------onRestart
01-08 12:22:40.319 3021-3021/activitylifecycle.xe.com.activitylifecycle D/Activity: ActivityA---------onStart
01-08 12:22:40.319 3021-3021/activitylifecycle.xe.com.activitylifecycle D/Activity: ActivityA---------onResume
01-08 12:22:41.125 3021-3021/activitylifecycle.xe.com.activitylifecycle D/Activity: ActivityB---------onStop
01-08 12:22:41.125 3021-3021/activitylifecycle.xe.com.activitylifecycle D/Activity: ActivityB---------onDestroy

由于技术水平有限,文章中难免会有错误,欢迎大家批评指正,另外附上小demoActivity生命周期的方法调用过程,谢谢大家的阅读。~~~~

以上就是Android非异常情况下的Activity生命周期分析的详细内容,更多关于Android Activity生命周期的资料请关注其它相关文章!


推荐阅读
  • 在Notepad++中配置Markdown语法高亮及实时预览功能
    本文详细介绍了如何在Notepad++中配置Markdown语法高亮和实时预览功能,包括必要的插件安装和设置步骤。 ... [详细]
  • Android 中的布局方式之线性布局
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 处理Android EditText中数字输入与parseInt方法
    本文探讨了如何在Android应用中从EditText组件安全地获取并解析用户输入的数字,特别是用于设置端口号的情况。通过示例代码和异常处理策略,展示了有效的方法来避免因非法输入导致的应用崩溃。 ... [详细]
  • JavaScript 页面卸载事件详解 (onunload)
    当用户从页面离开时(如关闭页面或刷新页面),会触发 onunload 事件,此时可以执行预设的脚本。需要注意的是,不同的浏览器对 onunload 事件的支持程度可能有所不同。 ... [详细]
  • 探索Java 11中的ZGC垃圾收集器
    Java 11引入了一种新的垃圾收集器——ZGC,由Oracle公司研发,旨在支持TB级别的内存容量,并保证极低的暂停时间。本文将探讨ZGC的开发背景、技术特点及其潜在的应用前景。 ... [详细]
  • 吴石访谈:腾讯安全科恩实验室如何引领物联网安全研究
    腾讯安全科恩实验室曾两次成功破解特斯拉自动驾驶系统,并远程控制汽车,展示了其在汽车安全领域的强大实力。近日,该实验室负责人吴石接受了InfoQ的专访,详细介绍了团队未来的重点方向——物联网安全。 ... [详细]
  • 本文探讨了使用普通生成函数和指数生成函数解决组合与排列问题的方法,特别是在处理特定路径计数问题时的应用。文章通过详细分析和代码实现,展示了如何高效地计算在给定条件下不相邻相同元素的排列数量。 ... [详细]
  • 本文提供了一种有效的方法来解决当Android Studio因电脑意外重启而导致的所有import语句出现错误的问题。通过清除缓存和重建项目结构,可以快速恢复开发环境。 ... [详细]
  • 探讨如何在映射文件中处理重复的属性字段,以避免数据操作时出现错误。 ... [详细]
  • Fiddler 安装与配置指南
    本文详细介绍了Fiddler的安装步骤及配置方法,旨在帮助用户顺利抓取用户Token。文章还涵盖了一些常见问题的解决方案,以确保安装过程顺利。 ... [详细]
  • 网络流24题——试题库问题
    题目描述:假设一个试题库中有n道试题。每道试题都标明了所属类别。同一道题可能有多个类别属性。现要从题库中抽取m道题组成试卷。并要求试卷包含指定类型的试题。试设计一个满足要求的组卷算 ... [详细]
  • 利用无代码平台实现高效业务应用开发
    随着市场环境的变化加速,全球企业都在探索更为敏捷的应用开发模式,以便快速响应新兴的商业机遇。然而,传统的软件开发方式不仅成本高昂,而且耗时较长,这往往导致IT与业务部门之间的合作障碍,进而影响项目的成功。本文将探讨如何通过无代码开发平台解决这些问题。 ... [详细]
  • 在Android应用开发过程中,开发者经常遇到诸如CPU使用率过高、内存泄漏等问题。本文将介绍几种常用的命令及其应用场景,帮助开发者有效定位并解决问题。 ... [详细]
  • 为何Compose与Swarm之后仍有Kubernetes的诞生?
    探讨在已有Compose和Swarm的情况下,Kubernetes是如何以其独特的设计理念和技术优势脱颖而出,成为容器编排领域的领航者。 ... [详细]
  • 本文介绍了如何通过安装 sqlacodegen 和 pymysql 来根据现有的 MySQL 数据库自动生成 ORM 的模型文件(model.py)。此方法适用于需要快速搭建项目模型层的情况。 ... [详细]
author-avatar
mobiledu2502932307
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有