Android会运行应用并启动一个活动,它会考虑设备的配置。这是指物理设备的配置(如屏幕大小、屏幕方向、以及是否有一个关联的键盘),另外还会考虑用户指定的配置选项(如本地环境)
Android启动活动时需要知道设备配置是什么,因为这可能会影响应用所需要的资源
活动从生到死:
在android中如何去处理配置变化?
有两种做法:1.可以告诉Android不要从新启动活动。2.可以保存活动的当前状态,这样活动就能自行重新创建并恢复到原来的状态
- 避开重建活动
这通常不是最好的选择,因为Android重建活动时它会针对新配置使用最合适资源。如果避开重建,你可能就必须编写大量额外代码来自行处理新的配置。
要告诉Adroid不要因为配置改变而重新创建活动,可以为AndroidMainifest.xml文件的activity元素增加一行代码,如下所示:
Android:configChanges=”configuration_change”
这里的configuration_change是配置改变的类型
例如:希望Android不要考虑屏幕方向和屏幕大小的变化
Android:configChanges=”orientation|screenSize”
如果Android发生如上变化,它会发出一个onConfigurationChanged(Configuration)方法而不是去创建一个活动
Public void onConfigurationChanged(Configuration config){ }
2.保存当前状态:
需要保存当前状态需要实现onSaveInstanceState( )方法。在活动撤销之前调用
Public void onsaveInstancestate(Bundle saveInstancestate){
}
可以使用Bundle的方法bundle.put*[类型名](“name”,value)将名/值对增加到Bundle
@Override
protected void onSaveInstanceState(Bundle saveInstanceState) {
super.onSaveInstanceState(saveInstanceState);
saveInstanceState.putInt("second", seconds);
saveInstanceState.putBoolean("running", running);
}
public final class Bundle extends BaseBundle implements Cloneable, Parcelable {.....}
然后在onCreate()中恢复状态
如果这个活动是从头创建的,这个Bundle参数就是null值,如果是重新创建的,可以使用Bundle类提供的get*[类型]
(“name”);
活动的周期不是只有创建和撤销
还有onStart()、onStop()、onRestart(),这几个方法多是活动继承至Activity类里面的。
活动在用户可见时调用onStart()方法,在用户不可见时就调用onStop()方法,这可能是活动被另一个活动覆盖了,或者是这活动被撤销了,在活动撤销前会调用onStop()方法,在调用onStop()方法前还会调用onSaveInstancestate()方法,来保存数据,如果活动不见了将他重置为可见之前,会调用onRestart()方法
如果覆盖一个android生命周期的方法(如onStop()方法),有一点很重要首先要使用
Super.方法名(.)
如果一个活动失去焦点,但在用户还是可见的那么活动就处于暂停状态,这时活动任然存在,并且会维护当前的所有状态。 onPause()方法与onResume方法能够用来处理活动的暂停与启动,在活动失去焦点并且可见的时候就会调用onPause()方法,在活动恢复焦点之前就会调用onResume()方法。
以下这张图是指活动生命周期
的前台生命期