手动管理配置更改

如果你的应用程序在特定配置更改期间不需要更新资源,并且你有性能限制要求你避免重新启动活动,那么你可以声明你的活动自己处理配置更改,这会阻止系统重新启动活动。

但是,当你必须避免因配置更改而重新启动时,此技术应被视为最后的手段,并且不建议用于大多数应用程序。要采用这种方法,我们必须将 android:configChanges 节点添加到 AndroidManifest.xml 中的活动 :

<activity android:name=".MyActivity"
          android:configChanges="orientation|screenSize|keyboardHidden"
          android:label="@string/app_name">

现在,当其中一个配置发生更改时,活动不会重新启动,而是接收对 onConfigurationChanged() 的调用:

// Within the activity which receives these changes
// Checks the current device orientation, and toasts accordingly
@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);

    // Checks the orientation of the screen
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
        Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
        Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
    }
}

请参阅处理更改文档。有关你可以在活动中处理哪些配置更改的更多信息,请参阅 android:configChanges文档和 Configuration类。