Activity生命周期

总论

了解Activity的生命周期,需要了解:

  1. 四种状态
  2. 七个重要方法
  3. 三个嵌套循环
  4. 其他

首先在开头放出生命周期的一张总图:

安卓Activity生命周期

四种状态

四种状态包括

  • 活动(Active/Running)状态
  • 暂停(Paused)状态
  • 停止(Stopped)状态
  • 非活动(Dead)状态

1. 活动(Active/Running)状态

当Activity运行在屏幕前台(处于当前任务活动栈的最上面),此时它获取了焦点能响应用户的操作,属于运行状态,同一个时刻只会有一个Activity 处于活动(Active)或运行(Running)状态。

此状态由onResume()进入,由onPause()退出

2. 暂停(Paused)状态

当Activity失去焦点(如在它之上有另一个透明的Activity或返回桌面)它将处于暂停, 再进而进入其他状态。暂停的Activity仍然是存活状态(它保留着所有的状态和成员信息并保持和窗口管理器的连接),但是当系统内存极小时可以被系统杀掉。Android7.0后, 多窗口模式下失去焦点的Activity也将进入onPause,但这不意味着Activity中的活动(动画、视频)等会暂停。虽然官方文档使用的是"an activity is going into the background" 来描述,但这不意味着一个Toast或者由本Activity创建的Dialog会调用onPause。结合这里对Activity的栈机制不难理解,只要当前Activity仍处于栈顶,系统就默认其仍处于活跃状态。

此状态由onPause()进入,可能下一步进入onResume()或者onCreate()重新唤醒软件,或者被onStop()杀掉

3. 停止(Stopped)状态

完全被另一个Activity遮挡时处于停止状态,它仍然保留着所有的状态和成员信息。只是对用户不可见,当其他地方需要内存时它往往被系统杀掉。

该状态由onStop()进入,如果被杀掉,可能进入onCreate()或onRestart(),如果彻底死亡,进入onDestroy()

Service生命周期

Service有两种启动方式:

  • startService() 启动本地服务Local Service
  • bindService() 启动远程服务Remote Service

远程服务允许暴露接口并让系统内不同程序相互注册调用。Local Service无法抵抗一些系统清理程序如MIUI自带的内存清除。

具体如何防止自己的Service被杀死可以看这个博客Android开发之如何保证Service不被杀掉(broadcast+system/app),已经做到很变态的程度了。此外今天看到如何看待 MIUI 工程师袁军对 QQ 后台机制的评论?,QQ的开启一个像素在前台的做法真的是…呵呵

两种不同的启动方式决定了Service具有两种生命周期的可能(并非互斥的两种)。概括来说,Service在被创建之后都会进入回调onCreate()方法,随后根据启动方式分别回调onStartCommand()方法和onBind()方法。如果Service是经由bindService()启动,则需要所有client全部调用unbindService()才能将Service释放等待系统回收。

一张图解释:

Service生命周期

回调方法的结构下图解释的很明白:

Service回调方法

参考博客:圣骑士Wind的博客:Android Service的生命周期

2020年,一文点破跨平台开发框架现状

多年来,跨平台移动开发已经获得了最流行软件开发趋势之一的声誉。这并不令人意外,因为采用跨平台开发技术使得软件工程师使用同一代码就能为不同平台构建应用程序,从而节省时间、金钱以及不必要的工作。

发布于:3天以前  |  33次阅读  |  详细内容 »

unicode编码在Android中的应用

Unicode(统一码、万国码、单一码)是计算机科学领域里的一项业界标准,包括字符集、编码方案等。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。1990年开始研发,1994年正式公布。

发布于:1月以前  |  201次阅读  |  详细内容 »

Android动态权限详解

很多App在首次启动时一通弹窗,申请各式各样的权限。后来苹果为改善用户体验,在App Store审核时要求App必须在使用前一刻才能申请权限,有效改善了此类问题。比如一款直播App,当你启动App时并不需要相机、录音权限,等到你开播时才需要申请这两个权限。这一场景,其实就类似今天要提到的Android动态授权。

发布于:1月以前  |  214次阅读  |  详细内容 »

百度App网络深度优化系列《三》弱网优化

网络优化解决的核心问题有三个,第一是安全问题,我们在系列《一》DNS优化进行了详细的讲解。第二是速度问题,我们在系列《二》连接优化也做了详细的介绍。第三是弱网问题,它是网络优化中最为复杂且需要反复验证和分析的问题,我们的系列《三》弱网优化就是要深入探讨这个问题。

发布于:1月以前  |  233次阅读  |  详细内容 »

百度App网络深度优化系列《二》连接优化

在系列《一》里大家了解到网络优化一般会首选优化DNS,而接下来的HTTP协议成为优化的重点,一般优化者会选择协议切换,合并请求,精简数据包大小等手段来对HTTP协议进行优化,严谨的说这都不属于网络优化的范畴。

发布于:1月以前  |  219次阅读  |  详细内容 »

百度App网络深度优化系列《一》DNS优化

网络优化是客户端几大技术方向中公认的一个深度领域,所以百度App给大家带来网络深度优化系列文章,其中包含系列《一》DNS优化,系列《二》连接优化,系列《三》弱网优化,希望对大家在网络方向的学习和实践有所帮助。

发布于:1月以前  |  250次阅读  |  详细内容 »

最多阅读

简化Android的UI开发 6月以前  |  164814次阅读
Google Enjarify:可代替dex2jar的dex反编译 1年以前  |  2140次阅读
Android设计与开发工作流 6月以前  |  2081次阅读
Android多渠道打包工具:apptools 1年以前  |  1842次阅读
Android权限 - 第一篇 1年以前  |  1816次阅读
Google Java编程风格规范(中文版) 1年以前  |  1786次阅读
Stetho 1年以前  |  1726次阅读
Android UI基本技术点 1年以前  |  1707次阅读
30分钟搭建一个android的私有Maven仓库 1年以前  |  1626次阅读
2015 Google IO带来的新 Android 开发工具 1年以前  |  1619次阅读
你应该知道的布局和属性 1年以前  |  1571次阅读
Gradle小知识#3:任务的顺序 1年以前  |  1561次阅读
听FackBook工程师讲*Custom ViewGroups* 1年以前  |  1561次阅读
MVP在Android平台上的应用 1年以前  |  1550次阅读