Adnroid四大组件z之Activity的学习
来源:互联网 发布:淘宝66大促 编辑:程序博客网 时间:2024/05/22 06:05
Activity作为android中四大组件之一,承担着与用户直接交互的任务。学习activity自然要先理解其生命周期,才能熟练掌握。下贴一张官方的图,相信大家也看了无数遍了。
Activity的生命周期
activity在系统中被一个栈管理着,当一个新的activity开启时,会被放入栈顶同时开始运行。activity通常由4种基本状态(翻译自API文档):
1)在前台屏幕运行(位于栈顶),处于活动的
2)失去了焦点但是还是可见的,处于pause状态,当系统内存不足时会被Kill掉
3)当被另外一个activity完全遮挡,出去Stop状态,但是依然保留着所有的状态与信息。但是也会被系统kill掉,当内存被需要时。
4)如果一个activity是paused或者stopped,系统可以将它清除内存,或者杀掉进程来结束。如果要再次将它展示给用户时,就必须完全restart同时提前存储状态
上述4点基本就是整个activity在程序中运行时的情况。
一个完成的生命周期(entire time)是第一次回调onCreate(Bundle)方法到单一的执行到onDestory();在onCreate里可以初始化全局的状态,同时在onDestory中释放掉资源,例如一个线程用来下载网络数据(耗时任务应该在工作线程中执行) 就可以在onCreate方法里创建,在onDestory里停止。
可见生命周期(visible lifetime),即onStart——onStop这个周期之间,在这段生命周期,activity一直能被用户在屏幕上看见。在onStart和onStop之间,你可以持有那些在activity中需要被展示给用户的资源,例如你可以在onStart里注册广播监控屏幕UI,当用户长时间没有看你展示的activity时,在onStop里注销广播。
前台生命周期(foreground lifetime)即回调onResume方法一直到调用onPause,这个周期内,activity位于所有其他activity之前,同时与用户进行交互。一个activity可以频繁的回到这两个方法,例如当屏幕息屏,当一个activity的结果分发过来了。所以google建议在这两个回调方法里的代码应该轻量级。
Activity的配置(Configuration)
根据API文档的说明,如果你不指定activity的config,当配置改变时(例如屏幕横竖切换,语言变换等)会造成当前activity被destoryed。可在manifest中使用android:configChanges来进行配置,具体参数见下表
具体各个字段的功能,笔者也没有逐个测试。通常在开发中会对横竖屏切换进行配置下,通常网上对android:configchangs的说明有以下几点,也是开发中经常用到的
1、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次
2、设置Activity的android:configChanges="orientation"时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次
3、设置Activity的android:configChanges="orientation|keyboardHidden"时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法
但是,自从Android 3.2(API 13),在设置Activity的android:configChanges="orientation|keyboardHidden"后,还是一样会重新调用各个生命周期的。因为screen size也开始跟着设备的横竖切换而改变。所以,在AndroidManifest.xml里设置的MiniSdkVersion和 TargetSdkVersion属性大于等于13的情况下,如果你想阻止程序在运行时重新加载Activity,除了设置"orientation",你还必须设置"ScreenSize"。下面是笔者自己的测试的横竖屏切换结果:
1)什么都不指定的情况下:竖屏切横屏
横屏切竖屏(并没有发现执行两次?此处存疑,希望有知道的朋友告之)
2)android:configchanges = oritation,横竖切换都会执行如下
3)android:configchanges = oritation|keyboardhidden|screenSize(本人测试minSdk=16,所以加上了screenSize),横竖切换都会执行如下
确实不会重新加载生命周期,只执行了onConfigurationChanged方法
Activity还有更多的知识点需要我来学习,在这里笔者将会在下一篇中带来Activity回退栈以和在Activity中临时保存数据进行学习。文中如有错误, 希望读者指出,大家共同进步,谢谢
- Adnroid四大组件z之Activity的学习
- Adnroid四大组件之BroadCastReceive
- 四大组件之Activity的再学习
- Android学习笔记--四大组件之Activity
- Android 四大组件学习之Activity生命周期
- Android四大组件学习之Activity
- Android 四大组件学习之Activity一
- Android 四大组件学习之Activity二
- Android 四大组件学习之Activity三
- Android 四大组件学习之Activity四
- Android 四大组件学习之Activity五
- Android 四大组件学习之Activity七
- Android 四大组件学习之Activity六
- 安卓四大组件之Activity学习
- Android学习笔记四大组件之Activity
- Android学习之路--四大组件--Activity
- Android四大组件学习之Activity
- Android四大组件之Activity全面学习
- 2016年11月8日,有感
- 关于Android调用JNI出现的 java.lang.UnsatisfiedLinkError
- maven 使用nexus 搭建私服
- 【ESP8266】ESP8266的MQTT客户端搭建教程
- Android App专项测试-压力测试笔记
- Adnroid四大组件z之Activity的学习
- <!DOCTYPE>声明
- python中Crypto的注意事项
- 学生管理系统学习(三)
- LeetCode 235. Lowest Common Ancestor of a Binary Search Tree
- C++ 计算机存储补码
- 老鸟的Python入门教程
- Ubuntu 出现apt-get: Package has no installation candidate问题
- 【Cocos Creator实战教程(6)】——get47(数字消除)