我遇到了两种防止屏幕旋转时重新绘制活动的方法。
一种是saveInstanceState + restoreInstanceState组合,我仍然无法成功实现。
另一个是在清单文件的活动标签中将configChanges属性声明为direction
我很好奇两者之间的区别。
最佳答案
我很好奇两者之间的区别。
saveInstanceState + restoreInstanceState组合与configChanges之间的区别在于,清单中的configcahnges属性将防止在发生指定的更改时破坏活动。在Android中,当您旋转设备或更改屏幕尺寸时,该活动将被销毁并重新创建。
saveInstanceState + restoreInstanceState组合将不会阻止活动被破坏和重新创建。实际上,它们只会帮助您将数据从被销毁的活动传递到将被重新创建的活动。
在saveInstanceState内部,将所需的所有数据保存到捆绑对象中。然后,在restoreInstanceState内部,您将获得这些数据并将其用于重新创建的活动中。
例如,如果我在清单文件中的活动标签内使用此属性:
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 - saveInstanceState + restoreInstanceState VS configChanges,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59579809/