我遇到了两种防止屏幕旋转时重新绘制活动的方法。
一种是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/

10-09 00:01