android知识点:Activity的生命周期

安卓基础知识之Activity篇(一):Activity生命周期 安卓基础知识之Activity篇(一):Activity生命周期 安卓基础知识系列旨在简明扼要地提供面试或工作中常用的基础知识,让对安卓还不太熟悉的小伙伴更快地入门。同时自己在工作中,也没法完全记住所有的基础细节,写这样的系列文章,可以让自己形成一个更完备的知识体系,同时给自己日后留个知识参考。 开始的开始 安卓四大组件中,最常用的组件莫过于我们的Activity组件。安卓程序员每天都在直接或间接地接触着Activity,所以Activity基础知识的重要性不言而喻。 正文 一. 正常情况下的生命周期 阅读详情

应用程序(或Activity)执行的状态称为进程(progress)。在 Android操作系统中,每个应用程序都是一个进程。Android框架会维护一个唯一的Activity历史记录堆栈,并观察每个应用程序进程。同时,系统平台会依照系统的内存使用情况和Activity的状态来管理系统内存。Activity类别除了负责运行程序流程与操作系统界面组件外,最重要的就是它提供了开发者控制进程生命周期的函数。

Android应用程序的生命周期是由Android框架进行管理的,而不是由应用程序自己直接控制。通常每一个应用程序(入口一般会是一个Activity的onCreate方法),都会占据一个进程。当系统内存即将不足时,会依照优先级顺序自动进行进程的回收。

一个Activity类除了onCreate方法外,还预先定义了onPause(暂停进程时的行为)、onResume(继续进程的行为)等基本行为。当从一个Activity切换到另外一个Activity的时候,原本的Activity将经过一连串的状态改变。我们就可以在程序中添加一些各种状态相对应的流程,每次Activity改变状态时,就会执行相应的流程。


Activity的状态

Android的虚拟机是使用堆栈(Stack based)管理。主要有4种状态:

  • Active(活动)
  • Paused(暂停)
  • Stopped(停止)
  • Dead(已回收或未启动)

Active(活动)

Active状态是用户启动应用程序或Activity后,Activity运行中的状态。

在Android平台上,同一个时刻只会有一个Activity处于活动(Activity)或运行(Running)状态。其他的Activity都处于未启动(Dead)、停止(Stopped)或是暂停(Paused)状态。

Paused(暂停)

Paused状态是目前运行的屏幕画面暂时暗下来,退到背景画面的状态。

当我们使用“Toast”、“AlertDialog”或者来电话时,都会让原本运行的Activity退回为背景画面。新出现的“Toast”、 “AlertDialog”等界面组件盖住了原来的Activity界面。Activity处于Paused状态时,用户是无法与原Activity互动的。

Stopped(停止)

Stopped状态是有其他Activity正在执行,而这个Activity已经离开屏幕,不再有进行中的状态。

通过长按“主页”键,可以调出所有处于Stopped状态的应用程序。在Stopped状态的Activity,还可以通过“Notification”来唤醒。

Dead(已回收或未启动)

Dead状态是Activity尚未被启动或者被手动停止,或已经被系统自动回收的状态。

要手动终止Activity,可以在程序中调用finish()函数。如果是被系统自动回收,则表明可能是系统内存不足了,所以系统根据内存不足的回收规则,将处于Stopped状态的Activity所占用的内存回收。


系统内存不足时的行为

当Android系统内存不足时,会根据以下的规则来回收内存:

  • 先回收与其他Activity或Service/Intent Receiver无关的进程,即优先回收独立的Activity
  • 再回收处于Stopped状态的其他类型的Activity(在背景等待的Activity)。最久没有使用的Activity会被优先回收(比较官方的说法是根据“LRU算法”)
  • 还不够?回收service进程
  • 还不行?关掉可见的Activity/进程
  • 关闭当前的Activity

当系统内存缺失到要关闭“可见的Activity/进程”时,那么是不是要考虑下换个手机了。


观察Activity运行流程

public class Bmi extends Activity {
    private static final String TAG = "Bmi";

    public void onCreate()
{
super.onCreate(...);
Log.v(TAG,"onCreate");
}

    public void onStart() {
        super.onStart();
        Log.v(TAG, "onStart");
    }

    public void onResume() {
        super.onResume();
        Log.v(TAG, "onResume");
    }

    public void onPause() {
        super.onPause();
        Log.v(TAG, "onPause");
    }

    public void onStop() {
        super.onStop();
        Log.v(TAG, "onStop");
    }

    public void onRestart() {
        super.onRestart();
        Log.v(TAG, "onReStart");
    }

    public void onDestroy() {
        super.onDestroy();
        Log.v(TAG, "onDestroy");
    }
}

上面的七个状态又可以归纳成三组:

1. 资源分配(Create/Destroy)

完整的Activity 生命周期由”Create”状态开始,由”Destroy”状态结束。建立 (Create)时分配资源,销毁(Destroy)时释放资源。

2. 可见与不可见(Start/ReStart/Stop)

当Activity 运行到”Start”状态时,就可以在屏幕上看到这个Activity。相反地,当 Activity 运行到”Stop”状态时,这个Activity 就会从屏幕上消失。

当使用者按下Back 按钮回到上一个Activity 时,会先到Restart 状态,再到一般 的Start 状态。

3. 使用者能否直接存取屏幕(Resume/Pause)

当有个Toast、AlertDialog、简讯、电话等讯息乱入时,原来的Activity 会进入 “Pause”状态,暂时放弃直接存取屏幕的能力,被中断到背景去,将前景交给优先级高的事件。当这些优先级高的事件处理完后,Activity就改进入”Resume”状态,此时又直接存取 屏幕。

实际函数名称中都冠以On开头命名的方法,Activity的生命周期状态图如下:

Activity的生命周期状态图


Activity运作流程

由实际运行的记录来看,我们可以归纳出所有Android 应用程序都遵循的动作流程:

一般启动

  • onCreate -> onStart -> onResume

启动Activity时的状态变化图

启动一个Activity 的基本流程是:分配资源给这个Activity(Create状态),然后将Activity内容显示到屏幕上(Start状态)。在一切就绪后,取得屏幕的控制权(Resume状态),使用者可以开始使用这个程序。

调用另一个Activity

  • onPause(1) -> onCreate(2) -> onStart(2) - onResume(2) -> onStop(1)

调用另一个Activity时的状态变化图

这是个先冻结原本的Activity,再交出直接存取屏幕能力(Pause状态)的过程。直 到Activity2完成一般启动流程后,Activity1才会被停止。

返回原Activity

  • onPause(2) -> onRestart(1) -> onStart(1) -> onResume(1) -> onStop(2) -> onDestroy(2)

返回原Activity1时的状态变化图

在新的Activity2中,点选硬件的Back按钮,回退到原本的Activity1。点Back按钮可以回到原本的Activity。

退出结束

  • onPause -> onStop -> onDestroy

结束Activity时的状态变化图

如果程序中有直接呼叫”finish”函式来关闭Activity的话,系统假设我们很确定我们 在做什么,因此会直接跳过先冻结(Freeze)的阶段,暂停(Pause),停止(Stop),然后销毁(Destroy)。

回收后再启动

  • onCreate ->onStart ->onResume

启动Activity时的状态变化图

被回收掉的Activity一旦又重新被呼叫时,会像一般启动一样再次呼叫Activity的onCreate函数。这个和前面第一个步骤中的一般启动是一样的流程。


当我们使用”Android”手机一阵子,在手机上已经执行过多个应用程序。只要按下”Back” (返回)键,”Android”就会开启最近一次开启过的Activity。

这时我们要是多次按“返回”键,理论上迟早会返回到某个已经销毁(Destroy)的Activity,这时会发生什么呢?

如果应该打开的Activity已经被回收了,那么这个Activity会再次被创建(Create)出来,再次被创建出来的Activity,当然会跟原本我们打开的Activity不一样。

所以如果要让再次被创建出来的Activity看起来跟原本打开的一样,那么在Activity之间切换时,我们就要留意数据的保存:最好在每次Activity运行到”onPause”或者”onStop”状态时先保存数据,然后在”onCreate”时将数据读出来。

STM32 TIM3硬件XOR+复位模式实现霍尔信号精准捕获 霍尔传感器是电机控制系统中获取转子位置的关键器件,其三路数字信号需通过高精度、低延迟的边沿检测机制转换为电角度信息。其核心原理在于利用定时器输入XOR逻辑合并多路信号,并结合从模式复位(Reset Mode)实现硬件级时间间隔测量——每次跳变强制计数器清零,使CNT值直接表征换相周期。该方案规避了软件轮询的不确定性,显著提升FOC控制的实时性与鲁棒性。典型应用场景包括BLDC/FOC电机驱动、机器人关节伺服及工业变频器设计,尤其适用于STM32F4系列等具备硬件XOR与从模式控制器的MCU平台。 阅读详情

相关推荐

数据中心光模块升级实录:从200G QSFP56到400G QSFP-DD的踩坑指南

本文记录了数据中心从200G QSFP56升级至400G QSFP-DD光模块的完整实战经验。文章深入剖析了升级过程中面临的兼容性、链路预算、布线、散热与功耗管理等核心挑战,并提供了具体的解决方案与排坑指南,为高速网络升级提供了宝贵的实践参考。

butter的博客 479

Android四大组件之Activity

一、Activity简介1.Activity作为安卓四大组件之一,主要用来提供手机屏幕和用户的的交互,比如:打电话、拍照、发邮件、看地图等等。2.每个Activity都有一个手机窗口用来绘制用户界面。这些窗口可以全屏,也可以小于手机屏幕,还可以浮在其他窗口之上。3.一个应用(Application)至少有一个Activity,当然,通常一个应用有多个Activity,但只有一个’main’Activ

周卓的博客 1200

Anroid8.1 强制修改系统可以adb remount

在Android6.0 (Android M)user版本上,发现使用adb root后再adb remount系统之后会提示这样信息:remount of /system failed: Read-only file system,这是不能对system分区进行操作,提示没有写权限,为只读文件系统Read-only file system,因为系统本身在user就不支持可写操作,我们就不能adb push来调试apk,如果想调试apk就需要修改system、vendor权限问题。 如下现象: C:\Use

wq892373445的博客 1407

android 不保留活动,手机越来越卡?这些“不保留活动”“垃圾消息推送”设置赶紧关闭...

我们在看文章的时候,大多看到的都是要怎么打开哪些手机设置,会给手机带来怎样的体验,其实手机中还有很多没有什么用生甚至可以成为是“鸡肋”的功能,这些功能很多是在手机出厂后就是自动打开的,时间一久会给手机带来不小的“压力”,建议大家还是将他们关闭的好!1.关闭不保留活动这个其实很少有朋友用过这个功能,开启这个功能后可以提升手机的运行,而且还可以省电,但是它的功能就是不能进行后台的运行,也就是说当你从第...

weixin_31507527的博客 1万+

用树莓派Pico低成本更新USB-C PD控制器固件实战指南

固件更新是嵌入式系统开发与维护中的核心环节,它直接决定了硬件设备的功能、性能与兼容性。其原理通常是通过特定的通信接口(如SWD、JTAG、UART或USB)与设备内部的Bootloader建立连接,将新的程序代码安全写入非易失性存储器。在USB Power Delivery(PD)和Type-C生态中,固件更新技术尤为重要,它能修复协议握手Bug、适配新设备并提升供电策略的灵活性。本文聚焦于一个典型的工程实践场景:如何利用广泛普及且成本极低的树莓派Pico开发板,作为USB-C协议到I²C协议的转换桥,实现

weixin_27869497的博客 456

ARM学习 | 紧耦合存储器 (TCM)

TCM 是一种专用的片上存储器,直接与处理器核心耦合。确定性访问:由于不涉及缓存替换或一致性管理,访问延迟固定。高带宽:TCM 通常通过专用总线连接处理器核心,可以提供更高的数据吞吐率。用户管理:TCM 的分配和管理完全由开发者控制,不依赖硬件缓存策略。ARM 处理器中的 TCM 通常分为ITCM(指令紧耦合存储器)和DTCM(数据紧耦合存储器),分别用于存储指令和数据。TCM 是 ARM 处理器中不可忽视的重要特性,在实时系统和高性能嵌入式应用中具有重要地位。

qq_43167806的博客 3329

关于Activity这一篇就够了

展望未来,随着Android系统的不断发展和用户需求的不断变化,我们期待Android系统在Activity方面提供更多的新特性和优化措施,为开发者创造更加便捷、高效和安全的开发环境。总之,Activity是Android应用开发中不可或缺的一部分,它提供了丰富的功能和灵活的机制,用于创建和管理用户界面,处理用户的交互操作,以及与其他组件进行通信。同时,随着Android系统的不断发展和用户需求的不断提高,开发者还需要不断学习和探索新的技术和方法,以提高应用的性能和质量。

VitorLiu的博客 2354

从VASP数据到LAMMPS模拟:手把手教你用DeePMD-kit搭建Cr-Si-Fe合金势函数

本文详细介绍了使用DeePMD-kit从VASP数据构建Cr-Si-Fe合金深度势能模型的全流程,包括数据准备、模型训练、优化及LAMMPS集成。通过实战教程,帮助研究者掌握DeePMD-kit训练技巧,实现高精度分子动力学模拟,提升材料计算效率。

weixin_33737134的博客 521

Android应用程序是否需要手动退出

不止一次,也不止一个人问过这个问题。我都回答了:不需要。但是,还是要记录下来。我们不妨从了解这个系统对于应用程序管理的一些内部机制开始说明原因。 对于Android系统而言,包含“进程”和“服务”。“进程”有正在运行的,也有刚刚离开在后台缓存的。“服务”是一个无界面、长时间运行的应用功能,并且不会轻易被终止。 我们知道,在Android中可以快速通过主页键(home)或者使用返回键(←)逐步离

777

YOLOv5改进之---EIoU,SIoU,AlphaIoU,FocalEIoU,Wise-IoU

本文主要针对yolov5的iou损失函数进行改进,主要涵盖EIoU,SIoU,AlphaIoU,FocalEIoU,Wise-IoU这几种损失

qq_41920323的博客 1465

企业级 Multi-Agent 实施指南:从需求拆解到上线验收的全流程方法论

本文基于12个不同行业(金融、制造、零售、互联网)的百万级Multi-Agent投产项目经验,提炼出一套可复用的全流程实施SOP,覆盖需求对齐与拆解、架构设计、开发实现、测试优化、上线部署、验收迭代6个核心阶段,包含标准化工具、量化指标、踩坑指南、可直接运行的代码示例,帮你避开90%的落地坑。需求阶段是项目成败的核心,必须对齐业务方的量化指标,明确系统边界架构设计要兼顾性能、安全、可扩展性,不要为了炫技选择复杂的框架工程化是投产的关键,测试、灰度、监控、降级机制缺一不可。

AI云原生与云计算技术学院 224

Android Activity详解

一、Activity概述 Activity,实现程序的交互。 Activity,代表手机或平板中的一屏。 Activity的4种状态: Activity的生命周期: 更正:OnRestart应该接到Onstart方法。 二、创建、启动和关闭Activity 1、创建Activity 创建继承自Activity的Activity 重写需要的回调方法 设置要显示的视图 //extends Ac...

一只蒻蒻的博客 1421

YOLOv8安防监控实战:跌倒/闯入/徘徊实时检测(附TensorRT加速+声光报警部署代码)

精准性:针对跌倒/闯入/徘徊的行为特征优化,准确率达89.3%,误报率低于5次/天;实时性:TensorRT加速到50+FPS,报警延迟<1秒,满足安防“黄金响应时间”;低成本:无需专用AI芯片,RTX 3060或Jetson Orin就能跑,硬件成本比传统方案低60%;易部署:代码全开源,提供从模型训练到硬件联动的完整流程,2天即可搭起原型系统。如果你的安防监控还在“漏报误报”“响应慢”,建议先从跌倒检测的姿态过滤改起——用100张样本测试,再集成TensorRT加速,90%能看到明显改善。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 679

Android Activity生命周期详解

Activity作为Android的四大组件之一,非常的重要,也是最常用的四大组件,使用Activity必须要在AndroidManifest中进行注册,那么作为Android的基础,Activity的生命周期你是否完全掌握了呢?下面就让我们来一起回顾一下Activity的生命周期吧! 首先,你需要知道 Activity的生命周期分为两种。   典型情况下的生命周期(就是我们开发中经常用到的...

李家大大大公子 2万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

【Android Activity】Activity的生命周期

onCreate:表示Activity正在被创建。生命周期的第一个方法,当打开一个activity时首先回调这个方法。在这个方法中一般做一些初始化工作,例如加载界面布局资源(setContentView)、数据初始化(findviewbyid)onRestart: 表示Activity正在被重新启动。当前activity从不可见变为可见状态时这个方法就会回调。

dev晴天的博客 1万+

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Android的Activity生命周期知识点总结,详情

系统仍然会为这种Activity保存相应的状态和成员变量,但是这并不是完全可靠的,当其他地方需要内存时,处于停止状态的Activity。我们通常会在这个方法中将一些消耗CPU的资源释放掉,以及保存一些关键数据,但这个方法的执行速度一定要快,不然会影响到新的栈顶Activity的使用。(因为它还是可见的,回收可见的东西都会在用户体验方面有不好的影响),只有在内存极低的情况下,系统才会去考虑回收这种Activity。是可以和用户进行交互的,我们平时看到和接触最多的就是这个状态下的Activity。

众智创新团队的博客 1858

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

【Android】Activity的生命周期

Activity的生命周期 1.返回栈 其实Android是使用任务(task)来管理Activity的,一个任务就是一组存放在栈里的Activity的集合,这个栈也被称作返回栈(back stack)。栈是一种后进先出的数据结构,在默认情况下,每当我们启动了一个新的Activity,它就会在返回栈中入栈,并处于栈顶的位置。而每当我们按下Back键或调用finish()方法去销毁一个Activity时,处于栈顶的Activity就会出栈,前一个入栈的Activity就会重新处于栈顶的位置。系统总是会显示处于

2303_79296612的博客 2794

【小王的安卓之路】Android安卓入门之Activity(活动)及其生命周期

- 1.Activity是什么? - 2.Activity的七大生命周期 - 3.Activity的生老病死 - 4.多个Activity交互时生命周期的变化 - 5.Activity的主要作用

小王的学习blog 4万+

Android全面解析之Activity生命周期

前言 很高兴遇见你~ 欢迎阅读我的文章。 关于Activity生命周期的文章,网络上真的很多,有很多的博客也都讲得相当不错,可见Activity的重要性是非常高的。事实上,我猜测每个android开发者接触的第一个android组件都是Activity。我们从新建第一个Activity开始,运行了代码,看到模拟机上显示了一个MainActivity标题和一行HolleWorld,从此打开Android世界的大门。 本篇文章讲解的重点是Activity的生命周期,在文章的最后也会涉及Activity的设计。不

一只修仙的猿 3221

Android activity的生命周期

 Android activity的生命周期activity类处于android.app包中,继承体系如下: 1.java.lang.Object 2.android.content.Context 3.android.app.ApplicationContext 4.android.app.Activityactivity是单独的,用于处理用户操作。几乎所有的

hpoi的专栏 18万+

【超详细】(安卓开发)使用Logcat实验对比安卓中Activity的生命周期

本文主要使用Logcat对比验证了安卓中Activity组件的生命周期

2202_75440587的博客 1125

Android的Activity知识点总结

Activity知识点总结 1. Activity的定义2.Activity的生命周期2.1任务和返回栈2.2运行状态2.3生命周期 1. Activity的定义 Activity是一个应用程序组件,提供一个屏幕,用户可以用来交互为了完成某项任务。 2.Activity的生命周期 2.1任务和返回栈 Android实际上使用任务(task)来管理activity,每一个任务就是一个返回栈(bac......

wodongx123的博客 4379

Android的Activity之生命周期

Activity是一个应用组件,用户可与其提供的屏幕进行交互,以执行拨打电话、拍摄照片、发送电子邮件或查看地图等操作。 每个 Activity 都会获得一个用于绘制其用户界面的窗口。窗口通常会充满屏幕,但也可小于屏幕并浮动在其他窗口之上。 一个应用通常由多个彼此松散联系的 Activity 组成。 一般会指定应用中的某个 Activity 为“主”Activity,即首次启动应用时呈...

yu314092706的专栏 8666

Android开发Activity生命周期详解

本文详解Android开发Activity生命周期。

qq_30725967的博客 2205

android Activity生命周期总结

前言:最开始学这个的时候,我还在想为什么要学生命周期,为什么要去了解它呢,我只要知道怎么让一个界面跳转到另一个界面不就行了吗?,举个栗子,假如你是一名医生,有一天有病人来你这里治病,你不可能就告诉它你有病,或者说你没病吧。 一:本节知识点 二:Activity生命周期状态 图片来源与来自这里 就通过一张图可能不容易理解吧,那举个栗子吧 栗子:新建一个安卓项目,在后端添加以下代码(添加日志打印,...

孤夜的博客 3851

Android Activity生命周期

1.activity Activity是由Activity栈管理,当来到一个新的Activity后,此Activity将被加入到Activity栈顶,之前的Activity位于此Activity底部。Acitivity一般意义上有四种状态: ①当Activity位于栈顶时,此时正好处于屏幕最前方,此时处于运行状态; ②当Activity失去了焦点,但仍然对用户可见(如栈顶的Activity是透明的或者栈顶Activity并不是铺满整个手机屏幕),此时处于暂停状态; ③当Activity被其他Activity

zenmela2011的专栏 7089
上一篇: android知识点:inputType常用取值
下一篇: 给Eclipse提速的7个技巧
hoxis
博客等级 码龄16年 789粉丝 239原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值