Activity四个状态
1.处于前台的Activity,可见的,可以与用户交互的。
2.可见的却不能操作,只有系统内存资源紧缺时,才会收回此activity。比如部分遮挡,当你打算操作下面的应用,下面的应用便置为顶部,成为状态1。被部分遮挡的activity便是处于状态2。还有可能有一个透明的应用覆盖原来的activity。
3.activity完全被其它的activity挡住,不可见也不可被操作,一旦系统缺资源,它的资源经常被系统回收,进入状态4。
4.销毁状态,为了节约内存,activity被系统杀死。Activity被系统杀死,或调用finish方法。
onCreate 当activity创建的时候。
onStart 走完这个方法,activity就可以被看到。
onResume 走完这个方法,可见可操作。
onPause 处于暂停状态,可见不可操作。
onStop 处于停止状态,不可见不可操作。
onDestory 处于销毁状态,activity被销毁。
从前台状态到停止状态,onPause onStop
从onstop执行后,回到前台, onrestart() onstart() onresume()
比较常见的用途是,操作数据库时,若是在本页面频繁使用数据库,则数据库不急着关闭资源,随时可以使用,等到页面关闭时,在调用destroy方法时,关闭资源。
onresume() 加载数据 恢复播放的状态。
onstop() 可以在这个方法中,停止所有关于刷新界面的操作。
ondestory() 释放资源的操作,放在这个方法中,若是资源比较大可以把释放资源操作放在onstop中。
当手机屏幕旋转时,会先销毁本页面,再重建本页面,onPause,onStop,onDestory,onCreat,onStart,onResume。
解决方案:
1.锁定屏幕,禁止旋转,可以在AndroidManifest.xml activity节点中配置,screenOrientation="portrait"(一直竖直的) landscape水平方向的。
2.旋转时,不销毁当前页面,但可以修改下当前页面,可以在AndroidManifest.xml activity节点中配置,configChanges="orientation|screenSize|keyboardHidden" 表示屏幕大小变化 , 方向变化或软键盘隐藏或显示状态改变,会走onConfigurationChanged方法,可以在这个方法里做一些修改操作,而不会销毁页面。
任务栈
当一个新的activity被开启,他会被放在栈顶,只要前一个activity没有退出,它依然不会被关闭,只是放在下面。
只有前面的activity退出,那么这个才会置顶。
默认的启动模式(standard):每次打开一个页面,那么都会置顶,一直累加。
在AndroidManifest.xml中可以修改启动模式,来决定activity在栈中创建实例的方式,activity中修改属性launchMode 可以是:
singleTop : 只要栈顶是这个activity , 则不会再次创建这个activity。(二维码扫描,一系列操作的最后一步,以防止开启多次的情况)
singleTask : 开启这个activity时,若是任务栈中存在singleTask的activity,那么再次开启这个activity不会重新创建一个新的对象 , 而会使这个activity上的activity全部出栈(即清空),使此activity置顶。(应用的主页面可以配置为singleTask)
singleInstance : 这个设备只有单独的实例,会创建一个新的栈,只放置这个activity。(很少使用,浏览器,慎用)