热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Activity生命周期与Activity调用栈分析(一)

Activity是整个AndroidApp直接与用户交互的核心组件,了解Activity的生命周期是了解Android系统的基础。Activity的起源:Activity是与用户交互的第一接口,它提

Activity是整个Android App直接与用户交互的核心组件,了解Activity的生命周期是了解Android系统的基础


Activity的起源:Activity是与用户交互的第一接口,它提供了一个用户用户完成指定的窗口。当开发者创建Activity之后,通过调用setContentView(View)方法来个Activity指定一个显示的界面,并以此为基础提供给用户交互的接口。系统采用Activity栈的方式来管理Activity。


Activity的状态:Activity一个最大的特点就是拥有多种状态,它可以在多种状态见进行切换,以此来控制自己的生命周期。

☆ Running

这个时候,Activity处于Activity栈的最顶层,可见,而且与用户进行交互。

☆ Paused

这个时候,Activity失去焦点,被另外一个非全屏或者一个透明的Activity放置在栈顶,Activity就转化为Paused状态,它只是失去了与用户交互的能力,所有的状态信息,成员变量都还保持着,只有在系统内存极低的情况下,才会被系统回收掉。

☆ Stopped

这个时候,Activity被另外一个Activity完全覆盖,那么Activity就会进入到Stopped状态,此时,它不在可见,但依然保持了所有信息和成员变量。

☆ Killed

这个时候,Activity被系统回收了或者从来没有创建过


Activity的生命周期:这张经典图众所周知,但是经常弄混它。


上图列举了很多的生命周期状态,但是其中只有三个是稳定的(Resumed,Paused,Stopped),而其他状态都是过渡状态,很快就会结束

1. Activity启动与销毁过程

在系统调用了onCreate()之后,马上回调用onStart(),然后继续调用onResume()以进入Resumed状态,完成启动。在Activity失去焦点之后,系统首先调用onPause(),然后继续调用onStop()最后调用onDestroy()来结束一个Activity的声明周期让它回到Killed状态。

以上这个过程就是Activity的启动与销毁过程。

onCreate():创建基本的UI元素。

onPause()与onStop:清除Activity的资源。

onDestoy():清除开启的线程。


2. Activity的暂停和恢复过程

当栈顶的Activity部分不可见后,就会导致Activity就入到Pause状态,此时就会调用onPasue()方法,当结束阻塞后,就会调用onResume()方法来恢复到Resume状态。

以上这个过程就是Activity的暂停和恢复过程

onPause():释放系统资源。

onResume():需要重新初始化在onPause()中释放的资源。


3. Activity的停止过程

栈顶的Activity部分不可见时,实际上后续会有两种可能,从部分不可见到可见,也就是恢复过程;从部分不可见到完全不可见,也就是停止过程。系统在当前Activity不可见的时候,总会调用onPause()方法。


4. Activity的重新创建过程

当你的Activity长时间处于stopped状态而且此时系统需要更多的内存或者系统内存纪委紧张时,系统就会回收你的Activity,而此时系统为了补偿你,会将 Activity状态通过onSavaInstanceState()方法保存到Bundle对象中,当然你也可以增加额外的键值对存入Bundler对象以保存这些状态。当你需要重新创建这些Activity的时候,保存的Bundle对象就会传递到onRestoreInstanceState()方法与onCreate()方法中,这也就是onCreate()方法中的参数---Bundle savedInstanceState的来源。不过要注意的是onSavaInstanceState()方法并不是每次当Activity离开前台的时候都会调用的,如果用户调用了finish()结束了Activity则不会调用。


推荐阅读
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文讲述了如何通过代码在Android中更改Recycler视图项的背景颜色。通过在onBindViewHolder方法中设置条件判断,可以实现根据条件改变背景颜色的效果。同时,还介绍了如何修改底部边框颜色以及提供了RecyclerView Fragment layout.xml和项目布局文件的示例代码。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 20211101CleverTap参与度和分析工具功能平台学习/实践
    1.应用场景主要用于学习CleverTap的使用,该平台主要用于客户保留与参与平台.为客户提供价值.这里接触到的原因,是目前公司用到该平台的服务~2.学习操作 ... [详细]
  • 安卓select模态框样式改变_微软Office风格的多端(Web、安卓、iOS)组件库——Fabric UI...
    介绍FabricUI是微软开源的一套Office风格的多端组件库,共有三套针对性的组件,分别适用于web、android以及iOS,Fab ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • Oracle seg,V$TEMPSEG_USAGE与Oracle排序的关系及使用方法
    本文介绍了Oracle seg,V$TEMPSEG_USAGE与Oracle排序之间的关系,V$TEMPSEG_USAGE是V_$SORT_USAGE的同义词,通过查询dba_objects和dba_synonyms视图可以了解到它们的详细信息。同时,还探讨了V$TEMPSEG_USAGE的使用方法。 ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • 本文讨论了如何使用IF函数从基于有限输入列表的有限输出列表中获取输出,并提出了是否有更快/更有效的执行代码的方法。作者希望了解是否有办法缩短代码,并从自我开发的角度来看是否有更好的方法。提供的代码可以按原样工作,但作者想知道是否有更好的方法来执行这样的任务。 ... [详细]
  • Google在I/O开发者大会详细介绍Android N系统的更新和安全性提升
    Google在2016年的I/O开发者大会上详细介绍了Android N系统的更新和安全性提升。Android N系统在安全方面支持无缝升级更新和修补漏洞,引入了基于文件的数据加密系统和移动版本的Chrome浏览器可以识别恶意网站等新的安全机制。在性能方面,Android N内置了先进的图形处理系统Vulkan,加入了JIT编译器以提高安装效率和减少应用程序的占用空间。此外,Android N还具有自动关闭长时间未使用的后台应用程序来释放系统资源的机制。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
author-avatar
让生活洒满阳光_622
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有