| |
|
开发:
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的五种生命状态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指定启动模式
2.通过Intent中设置标志位来为Activity指定启动模式
两种方式的区别在优先级上第二种方式高于第一种方式,当两种同时存在是,以第二种为准。 第二种方式无法为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 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年3日历 | -2025/3/4 2:43:44- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |