Android 四大组件之Activity
好酷屋教程网小编为您收集和整理了Android 四大组件之Activity的相关教程:1.生命周期 关于生命周期,在详细讲解下: Android四大组件之Activity 上图是从android官网获取的生命周期。
1.生命周期
关于生命周期,在详细讲解下:
Android 四大组件之Activity
上图是从android官网获取的生命周期。
正常的流程,很多文章都讨论过了,我们讨论几个特殊的情况。
1)OnResume->OnPause->OnResume 我们看这段解释:The activity is no longer visible。
也就是说在onpause阶段,activity还是可见的,but,它不在最上面,这种情况一般情况下,就是在activity页面弹一个dialog。
测试:亲测,android5.1 onpause不会走到。
还有一种说法是,有一个半透明的activity覆盖了activityA,activityA就会走到onPause,但不会on stop。
在android 5.1 上,还是会走到on stop。
我自己发现了一种可以的case:
ActivityA->ActivityB, ActivityB 的theme是@android:style/Theme.Dialog
这个时候ActivityA是onPause,but不会进入on stop。
2)App process killed
If an activity is paused or stopped, the system can drop the activity from memory by either asking it to finish, or simply killing its process. When it is displayed again to the user, it must be completely restarted and restored to its previous state.
上面代码解释了,当app处于onpause/on stop状态时,如果系统内存不足,该activity就会被回收,恢复的时候将需要从onCreate从新开始走。
protected void onCreate(@Nullable Bundle savedInstanceState)
所以说判断activity是否是首次创建,通过Bundle参数是否为null可以来判断。
当然,activity的内容已被回收,需要考虑如何恢复场景。
这里暂时先保留一个疑问:这个savedInstanceState是存在哪里的,为什么可以被重现?
关于onSavedInstanceState的说明:
这个方法不属于生命周期的概念,所以它与OnPause没有先后之分,并且它并不一定会被调用。
而该函数的目的,是为了在activity被回收的时候,有一个保存状态的地方。
如果app没有被回收,onRestoreInstanceState & onCreate也不会从新被走到。
这里会有个问题,这2个方法的bundle参数是一样的吗?
是的,它们是一份内容。onRestoreInstanceState 只是在onCreate的时机不是特别好做状态还原的时候,提供一次机会,在初始化结束的时候
回复状态。
onRestoreInstanceState 只有在activity重新init的时候,才会被调到。
This method is called between {@link #on start} and * {@link #onPostCreate}.
onPostCreate是Activity创建过程的最后一步,一般app不需要重载该方法。
另:系统会自动保存view的状态在savedInstanceState的时候。
关于saveInstanceState也是在mainthread里面执行回调的。
3)onDestory回收资源
在onDestory回收资源不一定是比较好的办法。应为onDestory可能不会被走到。一个可行的方式是自己管理资源的回收,而不依赖与生命周期。
2.Configuration Changes
配置变化,包括screen方向,语言
such as a change in screen orientation, language, in put devices, etc
这些改变,android希望由程序员自己来handler,所以如果没有做任何配置,activity会被重新创建。
fulmath.samples I/MainActivity: onDestroy: com.joyfulmath.samples.MainActivity@c4f7c4d [at (MainActivity.java:74)]10-09 06:39:35.951 3889-3889/com.joyfulmath.samples I/MainActivity: onCreate: com.joyfulmath.samples.MainActivity@28808a14 [at (MainActivity.java:27)]10-09 06:39:35.951 3889-3889/com.joyfulmath.samples I/MainActivity: onCreate: 2 [at (MainActivity.java:31)]
但是saveInstanceState会被保存下来,这从另一个方面证明,这个bundle不是存在activity里面的。
亲测:language和screen orientation的改变,都会创建新的activity实例。
关于这块的详细说明android官方文档有解释:
https://developer.android.com/guide/topics/manifest/activity-element.html#config
我就不在复述了。
关于语言的监听需要从local + layoutdirection来同时设置。android:configChanges
从实际使用场景来说,屏幕方向的改变是最有可能会遇到的。orientation+screenSize需要配置在manifest中。
3.permission
关于APK之间的activity相互调用,一共有三种方式:
具体可参考http://www.cnblogs.com/winxiang/archive/2012/05/04/2482883.html
但是第一种方式是无法阻止的。就像service & contentprovider一样,可以使用permission来控制访问权限。
我们可以自定义permission,并且由activity使用。
android:name="com.joyfulmath.samples.permission.ACCESS" android:label="Samples custome permission" android:protectionLevel="dangerous" > android:name=".MyApplication" android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> android:configChanges="orientation|screenSize|locale|keyboardHidden|layoutDirection"> android:permission="com.joyfulmath.samples.permission.ACCESS" >
上面是一个简单的permission的使用。
permission的目的是为了阻止其他apk对该activity的任意访问,所以同一个apk内,就没有这个概念。包括explored属性是一样的。
4.Process Lifecycle
系统会尽可能的保存process的存活,但是如果一定要回收process的话,会有一个优先级来管理。
前台进程
进程持有一个与用户交互的activity
进程持有一个service,该service同某个用户交互的activity绑定。该service是setforeground。该service正在进行生命周期回调。
进程持有一个boradcast,该broadcast在进行onreceiver。
kill前台进程需要用户交互。
可见进程
进程持有一个可见,但不在前台的activity,进入onpause,but没有进入on stop。
进程持有一个可见service,该service和可见activity在交互。
服务进程
进程持有一个不属于上面2种情况的service,也就是startservice的情况。
后台进程
后台进程通常就是不属于上面3种情况下,对应activity就是在on stop状态。
通常会有很多后台进程在运行,系统会有一个LRU表来管理,而最远的process将会优先被kill掉。
空进程
只是系统缓存,目的为了加快进程组件的加载。
以上就是好酷屋教程网小编为您收集和整理的组件,百科,标签,简介相关内容,如果对您有帮助,请帮忙分享这篇文章^_^
本文来源: https://www.haoku5.com/shenghuo/63fdb04923d141e0840b210b.html
相关推荐
热门专题
喝酒后喝咖啡好吗
历来有美酒加咖啡的说法,美酒加咖啡听上去意境很美好,很多人也有这个习惯,在喝完酒后,来一杯香浓醇厚的咖啡解酒提神,喝酒后喝咖啡好吗?喝酒后喝咖啡不好美酒加咖啡不仅对身体没有好处,起不到醒酒提神的作用,白糖为什么能溶解鱼刺 用什么可以溶解鱼刺
鱼是生活中常见的常见的食物,很多人都喜欢吃吧,吃鱼的时候稍不注意就被鱼刺卡住了怎么办呢?听说用白糖可以帮助溶解鱼刺,这是为什么呢?白糖为什么能溶解鱼刺白糖没有溶解鱼刺的作用。白糖是生活中常见的食物,很葫芦岛财政局每月拨款时间几号
葫芦岛财政局每月拨款时间为15号。通过查询官方网站显示,财政局每月15号左右对事业单位拔款。具体消息可关注官方网站,获得第一手权威信息。财政局负责地方的财政工作,贯彻执行财务制度,按照政策组织财政收入全新胜达怎么下载酷狗
全新胜达可通过U盘、SD卡等设备里下好音乐,插入车上的相应接口,直接进行下载安装即可。建议使用系统自带的播放器,另外安装可能会出现不兼容的情况。全新胜达是北京现代旗下的高端中型豪华SUV,配备2.0T腐竹不能和什么一起吃
腐竹由于味道鲜美,营养丰富受到很多人的喜爱,所以也出现了各种腐竹的吃法,但是腐竹一旦没有搭配吃好就会拉肚子,那么腐竹不能和什么一起吃呢?腐竹不能和什么一起吃1、蜂蜜腐竹跟蜂蜜一起搭配,会造成腹泻,有损广州行间网络科技有限公司(关于广州行间网络科技有限公司介绍)
导读大家好,小升来为大家解答以上的问题。广州行间网络科技有限公司,关于广州行间网络科技有限公司介绍这个很多人还不知道,现在让我们一起来看...大家好,小升来为大家解答以上的问题。广州行间网络科技有限公如何将多个类目放在一个海报里
用DW软件或者用PS软件做成切片连接,即可将多个类目放在一个海报里。海报这一名称,最早起源于上海,是一种宣传方式。旧时,海报是用于戏剧、电影等演出,活动的招帖。上海的人通常把职业性的戏剧演出称为海,而白糖和鸡蛋能一起吃吗 白糖和鸡蛋一起吃有什么危害
鸡蛋是生活中很常见的食物,白糖是生活中常见的调味品,白糖和鸡蛋能一起吃吗?下面一起来看看吧!白糖和鸡蛋能一起吃吗建议不要。糖水荷包蛋是很多人日常喜欢吃的食物,夏天到了,不少人会选择白糖作为首选糖类,但金纹石有没有蜡质光泽
金纹石有蜡质光泽,金纹石主要是黑底(也有褐色底)以金黄色图纹为特征的图纹石,金纹石是奇石界的后起之秀,金纹石一般都质地坚硬,其水冲度高,石体光洁平滑细腻,部分玉化程度高。莫氏硬度在5到8度,金色纹路和女生去塔尔寺禁忌
1、在寺院里,不能用手摸佛经、佛像、法器等,更不能跨越;转经轮时,一定是从左向右;不要乱摸藏族人的头和帽子。2、塔尔寺内很多经院殿堂有禁止拍照的告示牌。3、最好不要穿裙子。4、塔尔寺是藏传佛教,普通人