Android Activity生命周期调用的理解

作者:kikolcey 时间:2023-05-13 14:15:42 

状态

活动存放在一个叫返回栈的一个集合,当重新打开一个Activity时,它就会出现在栈顶。当要销毁该活动时,调用finish()或back,栈顶的活动就会出栈。

运行状态:一个活动处于栈顶时

暂停状态:不处于栈顶,但仍然可见。(失去焦点,非全屏或透明的activity放置在栈顶)

停止状态:不处于栈顶,也不可见,但还是会为它保留一些变量的相关数据。(被覆盖)

销毁状态:在栈中移除(killed状态)

Android Activity生命周期调用的理解

启动模式

standard模式:Activity的默认启动模式。对Activity的启动和切换没有任何限制,任何时候我们通过startActivity或startActivityForResult()启动一个standard模式的activity时,系统都会创建实例并放置到栈顶。【通过intent跳转的时候会创建新的activity实例,重复创建】

singleTop模式:设置成该模式时,任务栈的栈顶不能同时存在两个Activity的实例。但在整个栈中,可以存在多个实例。防止同一个Activity重复创建或启动多次【通过intent跳转的activity在栈顶,直接复用;若栈顶没有,重新创建】

singleTask模式:整个任务栈中只能存在该activity的一个实例。重复启动时,系统会销毁该实例之前的所有其他activity,将该activity移至栈顶。【app在启动时都会创建一个任务栈,应用内被创建的activity都会放进这个栈内。只要activity实例被创建过,再次创建时都直接复用已有实例】

singleInstance模式:该模式下的Activity都将独立存在一个任务栈下,并且不能重复创建或启动。当启动一个singleInstance模式的Activity时,系统会为应用创建一个新的前台任务栈,将Activity置于栈内。【整个Android系统中实例唯一,可以让别人的程序直接复用这个Activity】

其他时候要启动其他非singleInstance模式的Activity时,系统创建另一个前台任务栈,将非singleInstance模式的Activity按照启动顺序置于前台任务栈。将singleInstance模式的Activity所在的任务栈移至后台。之后启动任何Activity都是前后台任务栈的切换。

重复启动同一个singleInstance模式的Activity时,系统将Activity所在的任务栈切换至前台,而启动其他类型Activity,不需要切换任务栈,添加新实例即可。

操作APP时生命周期调用

点开Activity,按Home键回到主屏:onPause() , onStop()

主屏,再次点击App回到Activity:onRestart() , onStart() , onResume()

在A Activity上打开 B Activity:A onPause() , B onCreate() , B onStart() , B on Resume() , A onStop()

点击Back键:onPause() , onStop() , onDestroy()

Activity异常生命周期

异常生命周期:Activity被系统回收或当前设备的Configuration发生变化(横竖屏),导致Activity被销毁重建

Configuration发生变化导致Activity被杀死并重建

Android Activity生命周期调用的理解

onSave【Restore】InstanceState():系统自动调用,配置发生变化,Activity被异常销毁,用于存储数据(时机在onStop之前)。调用onRestore,把通过onSave保存的Bundle对象作为参数传给onRestore和onCreate。正常销毁,并不会调用这两个方法。

onRestore和onCreate的区别:都可进行数据恢复。但是onRestore一旦被系统回调,其Bundle一定不为空,无需额外的判断。但onCreate会出现为空的情况,当Activity为正常启动时,Bundle就会为空,需要额外判断。

使Activity在系统配置发生变化后不重建:给Activity指定configChange属性【orientation, screenSize】。orientation对应API < 13 , screenSize 对应API > 13 。设置之后,横竖屏切换时,不会再重建,取而代之是回调onConfigurationChanged

内存不足导致低优先级的Activity被杀死 内存不足,按照一定优先级杀死目标Activity的进程来回收内存。onSave会被调用用于存储数据,在后续恢复会调用onRestore恢复数据。

来源:https://blog.csdn.net/qq_43467051/article/details/122146092

标签:Android,Activity,生命周期
0
投稿

猜你喜欢

  • Spring AOP原理及动态代理

    2023-06-19 18:59:56
  • SpringBoot实现Excel文件批量上传导入数据库

    2023-11-29 11:13:44
  • 关于Java中配置ElasticSearch集群环境账号密码的问题

    2022-10-20 09:10:18
  • 如何从eureka获取服务的ip和端口号进行Http的调用

    2021-07-05 05:28:13
  • java的线程池框架及线程池的原理

    2023-11-16 22:04:51
  • C#设计模式之策略模式

    2023-08-08 21:00:11
  • Android开发从相机或相册获取图片裁剪

    2022-11-09 01:52:17
  • Android Selector和Shape的使用方法

    2022-08-05 23:48:38
  • Spring spel表达式使用方法示例

    2023-08-25 00:43:32
  • 如何解决Spring in action @valid验证不生效的问题

    2023-08-29 07:59:56
  • Android AutoCompleteTextView控件使用实例

    2023-11-24 03:01:56
  • spring mvc实现登录账号单浏览器登录

    2022-06-28 22:29:47
  • 浅谈c# 浮点数计算

    2023-08-04 22:10:09
  • 详解Java分布式事务的 6 种解决方案

    2022-06-19 13:33:49
  • C#类的访问修饰符用法分析

    2021-12-22 22:23:01
  • c# 服务器上传木马监控代码(包含可疑文件)

    2022-07-08 10:02:45
  • SpringBoot @Scope与@RefreshScope注解使用详解

    2022-11-13 17:52:44
  • Android笔记之:App应用之启动界面SplashActivity的使用

    2023-03-21 19:05:56
  • Android入门简单实例

    2021-07-26 16:34:04
  • Android自定义 WebView浏览器

    2023-07-21 00:31:34
  • asp之家 软件编程 m.aspxhome.com