IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android艺术开发探索之Activity的生命周期 -> 正文阅读

[移动开发]Android艺术开发探索之Activity的生命周期

目录

Activity的五种生命状态

Activity的生命周期

常见场景的生命周期调用方式

Activity的四种启动模式

如何给Activity指定启动模式

两种方式的区别

IntentFilter的匹配规则

action匹配规则

category匹配规则

data匹配规则


Activity的五种生命状态

1.启动状态

2.运行状态:该状态是可见的,可以与用户进行数据交互的

3.暂停状态:该状态在某些情况下是可见的,但是用户对它的操作没有响应

4.停止状态:该状态下是不可见的,当系统内存不足时,该状态下的Activity很容易被销毁

5.销毁状态

Activity的生命周期

OnCreate():Activity刚开始创建时,生命周期的第一个方法

OnStart():Activity在启动时,此时的界面还是不可见的,还无法与用户进行交互

OnCreate() 和 OnStart()方法一般用来加载布局

OnResume():第一次Activity启动完毕或者是Activity由暂停状态(OnPause状态)重新回到当前Activity。

OnResume()方法一般用来做数据恢复和展示

OnPause():Activity暂停时,此时的界面仍可见。

OnPause()方法一般是用来做数据存储、停止动画、注销广播等,但是不能做耗时操作(我在后面会讲为什么不能)

OnStop():Activity不在UI最顶层或者说该界面完全不可见。

OnStop()方法一般用来做回收工作和资源的释放

OnRestart():Activity由OnStop状态恢复到UI的最顶层。

OnRestart()用来做数据恢复

OnDestory():Activity被销毁

OnDestoy()用来做回收工作和资源释放

常见场景的生命周期调用方式

1.启动一个Activity ,会执行OnCreate()->OnStart()->OnResume()

2.销毁一个Activity,会执行OnPause()->OnStop()->OnDestory()

3.由ActivityA跳转到ActivityB,会执行OnPause()->OnCreate()->OnStart()->OnResume()->OnStop()

4.点击back键回退时,会执行OnPause()->OnStop()->OnDestory()

5.再次回到原Activity时,会执行OnRestart()->OnStart()->OnResume()

6.点击home键时,会执行OnPause()->OnStop()方法,当重新进入是会执行OnStart()->OnResume(),因此想关闭声音等操作我们一般是放在OnPause()->OnStop()方法中,恢复数据信息是放在OnStart()->OnResume()中

7.资源发生变化时(比如发生手机横屏切换竖屏等)OnSaveInstanceState()(用来保存当前状态的一些信息)->OnPause()->OnStop()->OnDestory() 当重新被创建时 会执行OnCreate()->OnStart()->OnRestoreInstanceState()(恢复数据)->OnResume()

面试题:两个Activity之间跳转时必然会执行的是哪几个方法? 答:当在A Activity里面激活B Activity的时候, A会调用onPause()方法,然后B调用onCreate() ,onStart(), onResume()。 这个时候B覆盖了A的窗体, A会调用onStop()方法。 如果B是个透明的窗口,或者是对话框的样式, 就不会调用A的onStop()方法。 如果B已经存在于Activity栈中,B就不会调用onCreate()方法。 故一定会执行A的onPause()和B的onStart()与onResume()。

Activity的四种启动模式

standard:标准模式,也是系统的默认模式。每次启动一个Activity都会创建一个新的Activity

singleTop:栈顶复用模式,在创建Activity之前如果新的Activity在栈顶,那么这个Activity就不会被创建,只会回调onNewIntent方法,如果该Activity不在栈顶就会重新创建实例。

singleTask:栈内复用模式,当创建一个新的Activity A时,系统首先会去寻找是否存在A想要的任务栈,如果不存在,就会重新创建一个任务栈,然后创建A实例后把A放到栈中。如果存在A所需的任务栈,再看栈中是否有实例存在,如果存在,就会将A上面的所有对象出栈,直到A位与栈顶,如果不存在,则会实例化一个A放入栈顶。

singleInstance:单实例模式,具有singleTask模式的所有特性,具有此种模式的Activity只能单独的位于一个任务栈中。

如何给Activity指定启动模式

一共有两种方式

1.通过AndroidMenifest为Avtivity指定启动模式

android:launchMode="standard"

2.通过Intent中设置标志位来为Activity指定启动模式

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

两种方式的区别

在优先级上第二种方式高于第一种方式,当两种同时存在是,以第二种为准。

第二种方式无法为Activity指定singleInstance模式,而第一种方式无法直接为Activity设置FLAG_ACTTIVITY_CLEAR_TOP标识。

IntentFilter的匹配规则

显示调用需要Intent能够匹配目标组件的IntentFilter中所设置的过滤信息,如果不匹配将无法启动目标Activity。

IntentFilter中过滤信息有action、category、data。为了匹配过滤列表,需要同时匹配过滤列表中的action、category、data信息。

action匹配规则

Intent中的action存在且必须和过滤规则中的其中一个action相同,Intent中如果没有指定action,那么匹配失败。action区分大小写。

category匹配规则

Intent中的category可以没有,但是存在时必须能和过滤规则当中的某一个相同。category不区分大小写。

data匹配规则

data由两部分组成,mimeType和URI。

mineType指的是媒体类型,比如image/jpeg,audio/mpeg4-generic和video/*等,可以表示图片、文本、视频等不同的媒体格式。

URI:包含比较多的内容

Scheme:URI的模式,比如http、file、content等,如果URI没有指定scheme,那么整个URI的其他参数无效,意味着URI也是无效的。

Host:URI的主机名,比如www.baidu.com,如果host未指定,那么整个URI的其他参数无效,意味着URI也是无效的。

Port:URI的端口号,比如80,仅当URI中的scheme和host都指定时port参数才是有意义的。

Path:表示完整路径

pathPattern:表示完整路径,但是路径里面可以包含通配符

pathPrefix:表示路径的前缀信息

Intent中的data存在且必须和过滤规则中的其中一个data相同

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-07-26 12:12:28  更:2021-07-26 12:13:24 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年4日历 -2024/4/25 13:22:19-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码