处理运行时系统设置变化(Handling Runtime Changes)

许多系统设置可以在运行时改变(RunTime),比如语言,屏幕方向,键盘是否可用。当这些变化发生时,系统默认行为是重新加载正在运行的Activity,执行onDestroy(),然后再执行onCreate(),这样做的目的是让程序使用和新设置匹配的资源。

当runtime change发生,比如横竖屏切换,系统流程是这样的:

onSaveInstanceState() -> onDestroy() -> onCreate() -> onRestoreInstanceState()

横竖屏切换后的Activity的onCreate(Bundle savedInstanceState),参数savedInstanceState不为空,其他方式比如被其他context  startActivity()得到的Activity其savedInstanceState为null。

如果退出Activity,不会执行onSaveInstanceState().当Activity被正常打开时,也不会执行onRestoreInstanceState()。

如果在配置文件中给Activity设置过android:configChanges,则当对应设置变化时系统会调用Activity中的方法onConfigChanged(),而不会再onDestroy() -> onCreate();否则不调用,而restart该Activity。


设备设置变化,对程序的影响是要保存用户的状态和匹配当前的设置。Google文档介绍了2种方式,对照上面介绍的,一种是让程序重新启动,但将状态数据封装到Bundle传给Activity,另外一种是程序自己处理,不走系统默认的重新启动的方式,回调onConfigChanged(),在该方法内自己处理。

针对上面的方式1,Google文档介绍说此种方式只适合传递“轻量”的数据,如果是传递像Bitmap等大的数据,会造成系统重启Activity变得很慢,如果确实要传递非轻量数据,官方建议使用Fragment。并且给出了伪代码例子,有时间了要写个demo验证下。启动应用,然后切到后台,被系统杀死进程后,如果保持用户状态,再次进入显示退出时的状态。

方式2的使用场景是要不需要切换资源或者是出于性能考虑,官方不建议使用该方式,是避免Activity重启最后的选择。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值