Android saveInstanceState+;restoreInstanceState VS configChanges
我遇到了两种方法来防止活动在屏幕旋转时重新绘制。 一个是saveInstanceState+restoreInstanceState组合,我还没有成功实现它 另一个是将清单文件的活动标记中的configChanges属性声明为orientationAndroid saveInstanceState+;restoreInstanceState VS configChanges,android,android-manifest,Android,Android Manifest,我遇到了两种方法来防止活动在屏幕旋转时重新绘制。 一个是saveInstanceState+restoreInstanceState组合,我还没有成功实现它 另一个是将清单文件的活动标记中的configChanges属性声明为orientation 我很好奇这两种解决方案之间有什么区别。这两种解决方案都与活动生命周期中的数据持久性有关。请阅读有关生命周期的更多信息 基本的区别在于,当应用程序死亡时,使用“保存/恢复实例”组合(有许多不同的方法)可以保存应用程序的状态,而当活动之前被销毁后,可以从
我很好奇这两种解决方案之间有什么区别。这两种解决方案都与活动生命周期中的数据持久性有关。请阅读有关生命周期的更多信息 基本的区别在于,当应用程序死亡时,使用“保存/恢复实例”组合(有许多不同的方法)可以保存应用程序的状态,而当活动之前被销毁后,可以从系统传递给活动的捆绑包中恢复保存的实例状态
configChanges
列出活动将自行处理的配置更改。在运行时发生配置更改时,默认情况下会关闭并重新启动活动,但使用此属性声明配置将阻止重新启动活动
一般来说,我建议不要用configChanges attr在应用程序中锁定方向,以防止活动停止。只需保存其状态并在整个生命周期中恢复即可
我很好奇这两者之间有什么区别
saveInstanceState+restoreInstanceState组合与configChanges之间的区别在于,清单中的configcahnges属性将防止在发生指定更改时销毁活动。在Android中,当您旋转设备或屏幕大小改变时,活动将被销毁并重新创建
saveInstanceState+restoreInstanceState组合将不会阻止销毁和重新创建活动。事实上,它们只会帮助您将数据从已销毁的活动传递到将要重新创建的活动。
在saveInstanceState中,您可以将所有需要的数据保存到bundle对象中。然后,在restoreInstanceState中获取这些数据,并在重新创建的活动中使用它们
configChanges
例如,如果我在清单文件中的活动标记内使用此属性:
android:configChanges="orientation|screenSize"
现在,当屏幕旋转时,此活动不会被销毁,活动的所有数据将保持原样,因为它不会被销毁
saveInstanceState+restoreInstanceState组合,我仍然无法成功实现
下面是saveInstanceState+restoreInstanceState组合的工作方式:
假设我有一个名为userScore
的全局变量,用于保存游戏中的用户分数。现在,我没有在我的活动标签中使用属性android:configChanges=“orientation | screenSize”
,因此如果用户旋转屏幕,它将被销毁,分数将丢失。为了防止它们丢失,我将使用saveInstanceState+restoreInstanceState,如下所示:
@Override
protected void onSaveInstanceState(@NonNull Bundle outState) {
outState.putInt("Score", userScore); // saving the userScore value
super.onSaveInstanceState(outState);
}
@Override
protected void onRestoreInstanceState(@NonNull Bundle savedInstanceState) {
userScore = savedInstanceState.getInt("Score"); // restoring the userScore value
super.onRestoreInstanceState(savedInstanceState);
}
在一个场景中,您正在处理所有 在没有重新启动活动的情况下进行相关配置更改。。而在第二秒钟,您只需处理所需的用户状态变量,即保存和恢复它们 在运行时发生配置更改时,默认情况下会关闭并重新启动活动,但使用android:configChanges属性声明配置将阻止活动重新启动。相反,活动将保持运行并调用其onConfigurationChanged()方法,自行处理配置更改是一项复杂的任务,应该避免 由于处理配置更改的隐藏复杂性,建议不要自己处理配置更改 但是,如果无法使用首选选项(onSaveInstanceState()、ViewModels和持久存储)保留UI状态,则可以在某些配置更改期间阻止系统重新启动活动。当配置发生更改时,您的应用程序将收到回调,以便您可以根据需要手动更新活动