android_Activity运行时屏幕方向与显示方式

当一个程序运行过程中,一些设备的配置可能会发生改变。

如:当横竖屏切换,键盘的可用性,这样的事情发生,Activity会被重新启动,这个时候可能当前activity中的自定义变量在横竖屏切换或者键盘的可用

性发生改变时,数据会被丢失,界面会被重新创建。

我们有两种方式能够解决配置发生改变后数据能恢复或者保持原来的数据。



方式一:重新创建Activity,恢复数据。

首先我们需要了解为什么这些配置发生改变后,数据会丢失,同时activity会被重新创建。

因为:在切换配置后,在销毁重新创建之前,会先onSaveInstanceState()去保存你应用中的数据,然后onDestroy(),最后才

onCreate()或onRestoreInstanceState();去重新启动Activity。

所以:我们应该重写OnSaveInstanceState该方法,将需要保存的变量相关数据保存下来。

随后在销毁之后,重新OnCreate时,我们需要在Oncreate方法中判断SaveInstanceState 是否为空,如果不为空,再从中获取销毁之前保存的数据。

if(saveInstanceInstate != null)

{

   index = saveInstanceState.getInt("销毁之前保存的数据的ky值",如果没有给予缺省值0);

}

这样当横竖屏切换后再重新Oncreate时,数据还是没切换之前的。


这个时候我们也就明白了为什么Activity启动时七大方法Oncreate中所带的参数是和意图了:

protected void onCreate(Bundle saveInstanceState){

}

其目的就是:在我们重新创建或者创建时有没有需要还原的状态值,我们在重写OnSaveInstateState方法时保存的数据。


但是这种恢复数据的方式还不是我们最理想的方式,最理想的方式是不需要重新创建Activity才是最佳的,因为有可能反复创建Activity会给性能方面带来影响。


方式二:不重新创建Activity。

直接在AndroidManifest.xml中配置:android:configChanges指定的属性,发生改变变化时,不会重新创建Activity,而是通知程序去调用

onConfigurationChanged()函数。

Activity中重写该方法: public void onConfigurationChanged(Configuration newConfig){

}

同时我们我们更多的时候需要设置横屏状态下独立的布局,这个时候我们只需要在Layout下创建一个新文件夹特定命名为:“layout-land”,将横屏布局

文件放入进去就行,当横屏时,系统会自动去调用该xml。









  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值