参考
Android 中,缺省情况下屏幕的切换动会销毁当前的Activity,并且重启Activity。当然这种缺省的处理
一种方式是在销毁Activity前保存数据,在Activity再次Create的时候载入配置。onS
@Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); if (dataString != null) { outState.putString("data", dataString); } }
onCreate(Bundle savedInstanceState) 负责恢复数据
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); dataString = savedInstanceState.getString("data"); }
onRetainNonConfigurationInstance() 和 getLastNonConfigurationInstance() 可以实现类似的功能。 前者用来保存数据,后者用来恢复数据,不过只限于Activity被销毁后马上被恢复的情况。
更常用的方式是阻止Activity的销毁和重新启动。需要首先在AndroidManifest.xml
android:configChanges="keyboardHidden|orientation"
然后再程序中截获 onConfigurationChanged(Configuration newConfig) 函数并且自己加以处理,这时候屏幕方向的切换不会重新启动Activity。必要的时候可以根据屏幕方向的
public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { setupLandScapeViews(); } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) { setupPortraitViews(); } }
如果不希望改变屏幕的显示方式,比如游戏中希望保持一种方式显示,可以在Activity中加一句
android:screenOrientation="portrait"
这样的话屏幕方向变化不会再改变显示方式和重启Activity。