《Android 开发入门与实战(第二版)》——6.6节配置改变
本节书摘来自异步社区《Android 开发入门与实战(第二版)》一书中的第6章,第6.6节配置改变,作者eoe移动开发者社区 组编 , 姚尚朗 , 靳岩,更多章节内容可以访问云栖社区“异步社区”公众号查看
6.6 配置改变
Android 开发入门与实战(第二版)
如果设备的配置改变了(定义在Resource.Configuration类中),任何显示在界面上的东西都需要更新以适应配置。由于Activity是与用户交互的主要机制,所以它也包括一些处理配置改变的特殊支持。
除非你指定了,否则配置改变(比如改变屏幕方向,语言,输入设备等)会导致你当前的Activity会销毁,并调用相应的Activity生命周期进程函数onPause(),onStop()以及onDestroy()。如果这个Activity运行在前台或者对用户可见,一旦这个实例(Activity)的onDestroy()被调用后就会马上又创建一个新的该Activity实例,并且前一个Activity实例中的onSaveInstanceState(Bundle)方法中产生的savedInstanceState也还存在。
这样做是因为任何程序资源,包括布局文件都能在任何配置值被改变的情况上被动地改变,因此唯一安全的处理配置改变的方式就是重新获取所有的资源,包括布局(layout),图片资源(drawables)以及字符资源(strings)。因为Activity必须知道怎样去保存自己的状态和重新创建自己的这种状态,所以根据新配置重新启动一个Activity是非常简便的方式。
当然,在某些特殊的情况下,我们可能希望在某些配置类型改变时绕过重新启动Activity来直接做某些应对配置值改变的情况。这个可以使用在manifest文件中配置的Activity的android:configChanges属性来做到。任何你在manifest中定义的配置类型,都会回调你当前Activity的onConfigurationChanged(Configuration)方法,而不是重新启动你的Activity。如果一个配置的改变涉及任何你不想处理的,这个Activity还是会被重新启动,而且onConfigurationChanged(Configuration)也不会被调用。