activity的生命周期

关于Activity的生命周期 Activity是一个很重要、很复杂的组件,他的启动不像我们平时直接new一个对象就完事了,他需要经历一系列的初始化。例如"刚创建状态",“后台状态”,“可见状态”等等。当我们在界面之间进行切换的时候,activity也会在多种状态之间进行切换,例如可见或者不可见状态、前台或者后台状态。当Activity在不同的状态之间切换时,会回调不同的生命周期方法。我们可以重写这一些方法,当进入不同的状态的时候,执行对应的逻辑。生命周期的一个重要作用就是让activity在不同状态之间切换的时候,可以执行对应的逻辑。 阅读详情

1.单个activity的生命周期图
activity是android的四大组件之一,负责界面内容,给用户提供交互接口。映射到mvc模型中,activity相当于view。图1.1描述了activity的基本的生命周期。

如图所示,activity在存在期间,会回调onCreate,onStart,onResume,onPause, onStop,onRestart,onSaveInstanceState, onDestory这八个方法。
onCreate方法是activity第一次创建的时候回调,一般在这里要做的事情包括创建视图(setContentView())、向视图填充必要的数据,如果咱们需要请求网络数据,通常在此处开启网络请求线程,这样可以将耗时的异步线程与主线程的UI绘制并行执行。此时activity还不可见。
onStart方法是activity从不可见变成可见的时候执行的方法。此时activity对于用户来说是可见的,包括有一个activity在他上面,但没有将它完全覆盖的情况,此时用户可以看到该activity,但是不能与它交互。
onResume方法是activity处于可见状态,并且获取了焦点,用户可以与该activity进行交互。
onPause方法是activity处于可见状态,但是已经失去了操作焦点,用户已经不可以操作该activity的内部组件了。此时它依然与窗口管理器保持连接。当activity再次变的可以点击的时候,那activity会回调onResume方法,进入可见可操作的状态。
onSaveInstanceState方法是android系统提供给开发者在activity会发生非正常kill风险之前调用,以便保存activity的状态,这样就可以在onCreate(Bundle)或者onRestoreInstanceState(Bundle)中恢复,onCreate(Bundle)与onRestoreInstanceState(Bundle)中传入的Bundle参数就是activity上一次调用onSaveInstanceState保存的Bundle数据。
onSaveInstanceState的调用时机是由系统决定的,对于开发者来说,在开发过程中分析系统是否会调用onSaveInstanceState回调方法的时候需要遵循一个重要原则,即当系统“未经开发者许可”时销毁了当前的activity,则onSaveInstanceState会被系统调用,这是系统的责任,因为它必须要提供一个机会让你保存你的数据(当然你不保存那就随便你了)。以下是几个常见的调用onSaveInstanceState方法的场景。
1、当用户按下HOME键时。
2、长按HOME键,选择运行其他的程序时。
3、按下电源按键(关闭屏幕显示)时。
4、从activity A中启动一个新的activity时。
5、屏幕方向切换时,例如从竖屏切换到横屏时。
在屏幕切换之前,系统会销毁activity A,在屏幕切换之后系统又会自动地创建activity A,所以onSaveInstanceState一定会被执行。
onStop方法是activity完全不可见的时候回调的,此时系统任务栈中还存在该activity的引用。
onDestory方法回调之后系统会销毁这个Activity实例在内存中占据的空间。在Activity的生命周期中,onDestory()方法是他生命的最后一步,资源空间等就被回收了。当重新进入此Activity的时候,必须重新创建,执行onCreate()方法。

2.startActivity启动流程
本文为了更好的说明activity的启动流程,假想以下的activity都是standard的启动模式。
场景: activity A 中点击了某个按钮之后,启动 activity B
图示:

生命周期流程:

如图所示,A首先会调用onPause回调方法,之后会调用B的onCreate,onStart,onResume回调方法,最后调用A的onStop方法。
A在onPause之后会发起启动B的流程,并且此时A已经不可以操作了。因此
,在activity的onStop生命周期里面,我们最好停止掉activity  A中消耗系统资源的操作,比如停止一切动画,清除广播接受者,释放传感处理器等。另外,在onPause中要避免发生cpu敏感的行为,比如写入数据库,这会影响切换到下一个activity的显示效果。总之,在onPause中的操作都应该是非常简单的,低性能消耗的,确保在onStop()被调用时,用户向其他界面的切换是迅速流畅的。当activity处于pause状态的时候,activity的实例继续常驻在内存中,当onresume发生的时候被重新调用。 你不需要重新初始化在onResume之前的任何阶段创建的控件.

场景:activity A在自己的onCreate生命周期里面启动了activity B,并且在此之前通过handler调用sendEmptyMessage方法向循环队列里面放一条message。
代码:
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        。。。。。。
        Handler temp = new Handler() {
            @Override
            public void handleMessage(Message msg) {
                super.handleMessage(msg);
                Log.d("test122q", "a message form A in onCreate Method");
            }
        };
     startActivity(new Intent(A.this, B.class));

        temp.sendEmptyMessage(1);

  }
}

生命周期流程:

如图所示,如果在activity A启动时,向主循环队列中发送一个message,并且启动了另外一个activity B.那么系统会在完成启动activity A的流程之后,才会处理在onCreate里面发送的message,之后才会启动activity B。这样的处理结果其实跟Android系统启动activity的方式有关。activity在调用startActivity启动新的activity的时候,会通过Binder进程通信机制与AMS进行同行,让AMS决定怎么启动ativity,通常需要考虑activity的启动模式,当前的系统任务栈,内存中的activity对象等因数,总之这是一个耗时的操作,并且处理的操作是运行在AMS的进程中,当AMS处理完成之后,会将启动activity的messgae放到合适的循环队列中,这样应用的主循环队列就能获取启动新的activity的message,以达到启动新的activity的目的。下图显示了activity启动新的activity的消息处理过程。
由于AMS的处理是需要花费时间的,因此在本例中,启动activiy B输出的日志会在A中的handler输出的日志之后,但是如果将temp.sendEmptyMessage(1);发送消息的方法延长合适的时间发送,那么A中的handler输出的日志会在启动activiy B输出的日志之后。

测试代码:
:
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        。。。。。。
        Handler temp = new Handler() {
            @Override
            public void handleMessage(Message msg) {
                super.handleMessage(msg);
                Log.d("test122q", "a message form A in onCreate Method");
            }
        };
     startActivity(new Intent(A.this, B.class));

        temp.sendEmptyMessageDelayed(1, 5000);

  }
}
输出日志:
通过输出日志,我们可以看出,将A的onCreate中发送message的时间延时5000ms之后,该message的日志会在最后输出,因为这段时间足够AMS处理activity B的启动工作了。


注意点:
1。activity的onPause方法回调的时候,用户已经不能与该activity进行交互,此时最好关闭activity中消耗CPU与系统资源的操作,特别是动画。
2。activity的onSaveInstanceState是系统在有可能发生将activity在未经APP允许的情况下KILL掉的时候回调,以便在activity因为内存不足等原因被系统杀死后重新恢复时,调用onCreate的时候能够传入之前保存的bundle参数,已达到恢复线程的功能。
3。activity启动新的activity的时候,会通过bind机制通知AMS进行调度处理,AMS处理完成之后,会通过消息队列通知应用启动相应的activity。

深入分析Activity onStop()生命周期延时10s回调的原因 Activiy生命周期 根据上图,现在有Activity A跳转到Activity B时,页面A,B的生命周期为: onPause(A)—onCreate(B)—onStart(B)—onResume(B)—onStop(A) 点击返回键从Activity B返回 Activity A 时,页面A,B的生命周期为: onPause(B)—onRestart(A)—onStart(A)—onResume(A)—onStop(B)—onDestory(B) 由于Activity生命周期都是在UI线程中执行,以 阅读详情

相关推荐

安卓基础知识之Activity篇(一):Activity生命周期

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

qq_40987010的博客 1万+

activity生命周期(这篇足够了)

activity生命周期(这篇足够了) 摘要 做安卓开发已经4年多了,所接触的知识点也比较零散,在这里记录一下android方面的知识点,方便自己以后复习,有什么不足的,以及错误的欢迎拍砖。 activity activity从开始到结束的四个状态。 activity的生命周期。 activity的进程优先级。 activity的四个状态 关于activity的...

android_Mr_夏 14万+

Activity 跳转的生命周期变化

1)Activity1跳转到Activity2的生命周期流程 1.Activity1启动: Activity1: onCreate() Activity1: onStart() Activity1: onResume() 2.点击按钮跳转到Activity2: Activity1: onPause() Activity2: onCreate() Activity2: onStart() Activity2: onR

GracefulGuigui的博客 1972

Activity生命周期

Activity生命周期 Activity的生命周期对于Android开发者来说是最熟悉不过的东西了,回过头看安卓基础总结一下看的内容 Activity常用的生命周期有以下七个,onCreate、onRestart、onStart、onResume、onPause、onStop、onDestroy 常用生命周期 方法名 简介 onCreate 表示Activity正在被创建,这也是...

睡客的博客 2万+

【大模型】大模型知识蒸馏 综述解读(Knowledge Distillation of Large Language Models)

知识蒸馏的(论文)方法总结。归纳了通过数据(如指令、对话、多模态)和训练方法(SFT、RL、数据增强),将复杂技能(如对齐、工具使用、多模态)蒸馏到开源模型的核心框架,附典型模型示例(如Alpaca、LLaVA)。

songxia928_928的博客 4335

代码实现 —— 基于 STM32 的可见光通信系统课程设计

基于STM32F103ZET6,源码如需移植,需要修改定时器捕获通道引脚,及定时器,如果你也有这个课设任务,希望对你有所帮助。

不善挽留 1万+

【Android Activity】Activity的生命周期

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

dev晴天的博客 1万+

图解5G HARQ-ACK反馈:从DCI解析到PUCCH发送的完整数据流

本文详细解析了5G通信系统中HARQ-ACK反馈机制的完整流程,从DCI解码到PUCCH发送的实战指南。重点介绍了HARQ-ACK码本生成、DCI关键参数解读以及PUCCH资源映射等核心技术环节,帮助工程师深入理解5G NR中的数据传输可靠性保障机制。

weixin_27722377的博客 396

Activity的生命周期

Activity作为Android的四大组件之首,生命周期当然是重中之重了。 虽然都是老生常谈的面试题了。。。但是被面试官问到了,还是不会的话, 尴尬不是一点点啊。(⊙﹏⊙)b Activity—其实我更愿意喊它一声“界面”呗。我们在手机上看到的一个窗口,就是它啊。 它的生命周期也分为两种情况: 第一:正常情况下的生命周期 第二:非正常情况下的生命周期:比如屏幕翻转或者内存不足,被ki...

dandan的专栏 1万+

IT:银行类金融科技岗笔试习题集合—四个模块包括【综合知识+EPI+英语+个性测评】持续更新,建议收藏

IT:银行类金融科技岗笔试习题集合—四个模块包括【综合知识+EPI+英语+个性测评】 导读:行测、综合知识、英语和性格测试。综合知识,包括货币学、金融、会计、计算机等内容。  行政能力测试,内容大家可以参考公务员考试,包括逻辑推理、数字推理、图形推理、文字推理。英语测试,包括语法和词汇30题、完型填空20题、10篇阅读理解50题,阅读理解文章特别长,生词特别多。 (1)、英语可以Ctrl+F...

头部AI社区如有邀博主AI主题演讲请私信—心比天高,仗剑走天涯,保持热爱,奔赴向梦想!低调,专注,谦虚,自律,反思,成长,还算比较正能量的博主,公益免费传播…内心特别想在AI界做出一些可以推进历史进程影响力的技术(兴趣使然,有点小情怀,也有点使命感呀 2万+

基于物联网设计温室水培系统(NBIOT+华为云IOT)_338

本项目设计并实现了一套基于物联网的温室水培系统。系统以STM32F103RCT6单片机为核心控制器,结合SHT30温湿度传感器、SGP30二氧化碳传感器、BH1750光照传感器及液位检测传感器等硬件,实现对温室内环境参数的实时采集。系统支持自动和手动两种控制模式,能够根据传感器数据自动控制补光灯、通风风扇、遮光卷帘、降温水帘及营养液补充电机。通过NBIoT模块,系统可将采集的数据通过MQTT协议上传至华为云IOT平台,用户可通过Android手机APP或Windows上位机进行远程监控与控制。

413

Activity生命周期(Activity弹出Dialog会触发Activity生命周期吗)

Activity弹出Dialog对生命周期有什么影响_weixin_43976036的博客-优快云博客_activity弹出dialog生命周期Activity弹出 Dialog 对生命周期有什么影响我们知道,生命周期回调都是 AMS 通过 Binder 通知应用进程调用的;而弹出 Dialog、Toast、PopupWindow 本质上都直接是通过 WindowManager.addView() 显示的(没有经过 AMS),所以不会对生命周期有任何影响。如果是启动一个 Theme 为 Dialog 的

C++ JAVA的专栏 4270

Python 爬虫实战:深入闲鱼平台,抓取二手好物价格波动数据

本文介绍了如何利用Python爬虫抓取闲鱼(Xianyu)二手交易平台的商品价格数据并分析其波动趋势。通过requests和BeautifulSoup库实现网页数据抓取与解析,使用pandas进行数据清洗和存储,最后借助matplotlib可视化价格波动情况。文章详细展示了从网页结构分析、数据采集到波动率计算和趋势可视化的完整流程,并建议通过定时任务实现持续数据更新。该项目能为二手市场交易者提供价格参考,帮助优化买卖决策。

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

Activity生命周期基础篇

Activity生命周期的基础篇 本篇主要讲解一个Activity的生命周期和多个Activity交互的生命周期。Activity,一个页面加载出来就是通过Activity这个载体。 先来说以I行啊一个Activity的生命周期。我们在环境中创建一个Activity的时候,执行的方法及顺序是onCreate--->onStart--->onResume,当到onResume的时候Act

程序员成长指北 4036

【数据集】全球大气空气柱平均甲烷(XCH₄)和一氧化碳(XCO)浓度数据集 TROPOMI/WFMD

全球大气空气柱平均甲烷(XCH₄)和一氧化碳(XCO)浓度数据集 TROPOMI/WFMD

WW、forever的博客 387

详细分析 Bladex中的swagger-resources资源未授权访问的解决方法

有如下方式,网关过滤、去除配置以及修改代码还有隐藏彩蛋(附Demo),推荐阅读

码农研究僧的博客 1727

Activity及Activity的生命周期

Android四大组件五大布局。四大组件是:   Activity对于初学者来说是接触最多的一个,当然我也是,Activity是应用程序的表现层,应用程序中每个屏幕的显示都通过继承和扩展Activity类来实现。App中多个页面的切换即是通过多个Activity的相互跳转来完成的。一般情况下,一个Activity类中就需要为它设置一个View,这样我们可以认为这个Activity代表这个界面。

QuietShake的博客 961

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Activity的生命周期理解笔记

Activity的生命周期理解笔记

u013405006的专栏 1738

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Activity生命周期详解

目录 问题一:Activity A启动另一个Activity B会回调哪些方法?如果Activity B是完全透明呢?如果启动的是一个Dialog呢? 问题二:谈谈onSaveInstanceState()方法?何时会调用? 问题三:横竖屏切换时,Activity的声明周期如何变化 源码展示: 1、style.xml 2、AndroidManifest.xml 3、FirstActi...

songzi1228的博客 524

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

activity生命周期

大家好,今天给大家详解一下Android中Activity的生命周期,我在前面也曾经讲过这方面的内容,但是像网上大多数文章一样,基本都是翻译Android API,过于笼统,相信大家看了,会有一点点的帮助 ,但是还不能完全吃透,所以我今天特意在重新总结一下.  在Activity从建立到销毁的过程中需要在不同的阶段调用7个生命周期方法。这7个生命周期方法的定义如下: pro

csdnlingyu的专栏 482
上一篇: android的TextView的TextWatcher使用
下一篇: 死锁的条件
LuckySort
博客等级 码龄17年 1粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值