当屏幕旋转时,系统会销毁当前的activity并重新创建,这时就会丢失一些数据。我们以一个例子来展示activity的销毁创建过程。
下面是布局显示:
可以看出布局显示了时间,下面有一个输入框,这是我们自己输入的内容。我们在Activity里面重写了onDestory等方法,在日志文件中打印出Activity的销毁与创建的过程。接下来我们旋转屏幕。
可以看出时间发生了变化但是输入框里面的内容没有发生改变。
我们再看看打印出的日志:
可以清楚的看见Activity经历的状态从创建到销毁到再次创建。而新创建的Activity并没有保存原先的数据内容。
我们怎么解决屏幕配置变更呢,怎么可以保存原先的数据呢?
这里我列举出三种方法。
1.限定屏幕方向
即我们让屏幕方向保持不变,无论怎么旋转,屏幕都是一个方向,水平或者竖直。在AndroidManifest.xml文件中,添加如下代码:这里我们可以选择poritrait或landscape,水平或竖直
android:screenOrientation="portrait"
即:
效果为:
可以看到旋转前后时间不变。
2.自己处理变更,即告诉系统不需要重启Activity
我们在AndroidManifest.xml文件中添加下列代码:
android:configChanges="keyboardHidden|orientation|screenSize"
让屏幕自适应,注意要删掉先前的限定屏幕方向的代码,否则固定屏幕为水平。
效果为:
这样旋转屏幕即不会让数据不变也能适应屏幕大小。
3.系统处理变更
即我们用onSaveInstanceState 和onRestoreInstanceState方法,通过bundle传值。