Android 深入研究之 Activity生命周期

举报
呆呆敲代码的小Y 发表于 2021/07/21 17:13:49 2021/07/21
【摘要】 前言最近在网上学习安卓,想研究下安卓应用的实现原理。就先从最直观体验的Activity的流程开始研究吧Activity生命周期activity从开始到结束的四个状态。activity的生命周期activity的进程优先级1.activity的四个状态activity四个状态和所在的生命周期  关于activity的四个状态: running-paused-stopped-killedrunn...


前言

最近在网上学习安卓,想研究下安卓应用的实现原理。就先从最直观体验的Activity的流程开始研究吧

Activity生命周期

  • activity从开始到结束的四个状态。
  • activity的生命周期
  • activity的进程优先级

1.activity的四个状态

activity四个状态和所在的生命周期 activity四个状态 关于activity的四个状态: running-paused-stopped-killed

  1. running->当前显示在屏幕的activity(位于任务栈的顶部),用户可见状态。
  2. poused->依旧在用户可见状态,但是界面焦点已经失去,此Activity无法与用户进行交互。
  3. stopped->用户看不到当前界面,也无法与用户进行交互 完全被覆盖.
  4. killed->当前界面被销毁,等待这系统被回收

由上图我们得知:

Starting ——–>Running 所执行的生命周期顺序 onCreate()->onstart()->onResume() 当前称为活动状态(Running),此activity所处于任务栈的top中,可以与用户进行交互。

Running ——>Paused 所执行Activity生命周期中的onPause() 当前称为暂停状态(Paused),该Activity已失去了焦点但仍然是可见的状态(包括部分可见)。

Paused ——>Running所执行的生命周期为:OnResume() 当前重新回到活动状态(Running),此情况用户操作home键,然后重新回到当前activity界面发生。

Paused ——>Stoped所执行的生命周期为:onStop() 该Activity被另一个Activity完全覆盖的状态,该Activity变得不可见,所以系统经常会由于内存不足而将该Activity强行结束。

Stoped——>killed所执行的生命周期为:onDestroy() 该Activity被系统销毁。当一个Activity处于暂停状态或停止状态时就随处可能进入死亡状态,因为系统可能因内存不足而强行结束该Activity。

2.activity的生命周期

在这里插入图片描述

onCreate(): 当我们点击activity的时候,系统会调用activity的oncreate()方法,在这个方法中我们会初始化当前布局setContentLayout()方法。

onStart(): onCreate()方法完成后,此时activity进入onStart()方法,当前activity是用户可见状态,但没有焦点,与用户不能交互,一般可在当前方法做一些动画的初始化操作。

onResume(): onStart()方法完成之后,此时activity进入onResume()方法中,当前activity状态属于运行状态 (Running),可与用户进行交互。

onPause() 当另外一个activity覆盖当前的acitivty时,此时当前activity会进入到onPause()方法中,当前activity是可见的,但不能与用户交互状态。

onStop() onPause()方法完成之后,此时activity进入onStop()方法,此时activity对用户是不可见的,在系统内存紧张的情况下,有可能会被系统进行回收。所以一般在当前方法可做资源回收。

onDestory() onStop()方法完成之后,此时activity进入到onDestory()方法中,结束当前activity。

onRestart() onRestart()方法在用户按下home()之后,再次进入到当前activity的时候调用。调用顺序onPause()->onStop()->onRestart()->onStart()->onResume().

3.activity优先级

前台进程>可见进程>service进程>后台进程>空进程

前台进程(Foreground process) 前台进程是用户当前做的事所必须的进程,如果满足下面各种情况中的一种,一个进程被认为是在前台:

1.当前进程activity正在与用户进行交互。 2.进程持有一个Service,这个Service处于这几种状态:①Service与用户正在交互的Activity绑定。②Service是在前台运行的,即它调用了 startForeground()。③Service正在执行它的生命周期回调函数(onCreate(), onStart(), or onDestroy())。 3.进程持有一个BroadcostReceiver,这个BroadcostReceiver正在执行onReceive()方法

可见进程(Visible process) 如果一个进程不含有任何前台的组件,但仍可被用户在屏幕上所见。当满足如下任一条件时,进程被认为是可见的:

  1. 进程持有一个activity,这个activity不再前台,处于onPouse()状态下,当前覆盖的activity是以dialog形式存在的。
  2. 进程有一个service,这个service和一个可见的Activity进行绑定。

服务进程 (Service process) 服务进程没有和用户可以看到的东西绑定,但是它们一般在做的事情是用户关心的,比如后台播放音乐,后台下载数据等。所以系统会尽量维持它们的运行,除非系统内存不足以维持前台进程和可见进程的运行需要

1.如果一个进程中运行着一个service,这个service是通过 startService() 开启的,并且不属于上面两种较高优先级的情况,这个进程就是一个服务进程

后台进程(Background process) 如果进程不属于上面三种情况,但是进程持有一个用户不可见的activity,后台进程不直接影响用户体验,系统会为了前台进程、可见进程、服务进程而任意杀死后台进程

activity的onStop()被调用,但是onDestroy()没有调用的状态。该进程属于后台进程。

空进程 如果一个进程不包含任何活跃的应用组件,则认为是空进程。

该进程没有任何运行的数据了,且保留在内存空间,并没有被系统killed,属于空进程,该进程很容易被杀死。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。