android 如何在设备方向更改时重新启动 activity 或片段?

How android restart the activity or fragment on device orientation change?

android 如何在旋转应用程序时重新启动 activity 或片段? 我对它在这个过程中使用的方法或标志很感兴趣。感谢

在您的片段中覆盖 onconfigurationchanged 方法

@Override
public void onConfigurationChanged(Configuration newConfig) 
{
   super.onConfigurationChanged(newConfig);

  // reload your views here
}

当你的方向改变时,所有的片段和活动都被销毁,视图被重新创建;除非您更改配置设置:

<activity android:name=".SampleActivity"
          android:configChanges="orientation|keyboardHidden">

所以基本上这里的关键是 onStop() 和 onDestroy() ,你应该在 onStop() 方法(甚至 onPause() )中旋转时保存你的任务状态,以便在视图关闭时再次重新启动它们已加载(onResume())。

在这里查看更多内容link

当 Activity 和 Fragment 旋转时,它们会被销毁(onDestroy()),然后它们会经历与创建时相同的生命周期。

当任何配置更改时,例如发生设备方向,activity 将被销毁并重新创建,除非您在清单文件中修改了此过程。正如@Lazai 提到的,如果您更改 activity 配置更改功能,您必须手动加载新方向所需的任何新资源,包括回调内的样式、主题、可绘制对象和布局 Activity.onConfigurationChanged(Configuration newConfig).

注意:如果您没有在清单文件中指明您希望手动处理配置更改,您将永远不会收到对 Activity.onConfigurationChanged(Configuration newConfig).

Android exports recommend not handling the configuration changes yourself and letting the OS handle itself. So how to know when orientation changes are taking place when you don't get calls to onConfigurationChanged(Configuration newConfig)? Well if you're are targeting above API Level 11, their is a handy method on the Activity class that indicates if activity is experiencing the a configuration change, called Activity.isChangingConfigurations(). This method will always return false until the activity is preparing to be destroyed. It will have a valid value prior to the call Activity.onPause(),您可以检查并确定您的设备是否在旋转,并且您的应用应该执行一些特殊的优化或状态保存过程。

我个人建议让系统处理配置更改并检查方向是否发生变化,因为在大型应用程序或复杂的应用程序中 activity 重新加载必要的资源和资产可能会非常乏味,只是为了防止activity 丢弃一个简单的对象或在旋转过程中。