知识点:屏幕旋转 android:configChanges
如何保证在屏幕横竖屏旋转时,不重新执行onCreate等逻辑,直接保存数据恢复显示在页面
要声明由 Activity 处理配置变更,请在清单文件中编辑相应的<activity> 元素,以包含 android:configChanges属性以及代表要处理的配置的值。android:configChanges属性的文档中列出了该属性的可能值(最常用的值包括 "orientation"和 "keyboardHidden",分别用于避免因屏幕方向和可用键盘改变而导致重启)。您可以在该属性中声明多个配置值,方法是用管道 | 字符分隔这些配置值
注意:从 Android 3.2(API 级别 13)开始,当设备在纵向和横向之间切换时,“屏幕尺寸”也会发生变化。因此,在开发针对 API 级别 13 或更高版本(正如 minSdkVersion 和 targetSdkVersion 属性中所声明)的应用时,若要避免由于设备方向改变而导致运行时重启,则除了 “orientation” 值以外,您还必须添加 "screenSize"值。 也就是说,您必须声明android:configChanges="orientation|screenSize"。但是,如果您的应用面向 API 级别 12 或更低版本,则 Activity 始终会自行处理此配置变更(即便是在 Android 3.2 或更高版本的设备上运行,此配置变更也不会重启 Activity)。
贴2段代码大家自己去验证下
public class ConfigAct extends Activity { public static final String TAG = "ConfigAct"; private String str = "0"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.config_act); // 模拟数据初始化 str = "1"; Log.e(TAG, "onCreate:" + str); } @Override protected void onStart() { super.onStart(); // 模拟显示之后,数据发生改变 str = (new Date()).getTime() + ""; Log.e(TAG, "onStart:" + str); } @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); Log.e(TAG, "onConfigurationChanged:" + str); } } <activity android:name=".config.ConfigAct" android:configChanges="orientation|screenSize"/>