【问题标题】:If my GLSurfaceView app never needs to read the Android device's locale, can I safely ignore locale config changes?如果我的 GLSurfaceView 应用永远不需要读取 Android 设备的语言环境,我可以安全地忽略语言环境配置更改吗?
【发布时间】:2012-07-12 19:36:53
【问题描述】:

默认情况下,如果用户在我的应用程序运行时更改其设备的显示语言,Android 将销毁然后重新创建 Activity。这样做是为了确保我的应用正确使用最新设置。

我可以通过将locale 添加到清单中的configChanges 属性来覆盖此行为。然后当用户改变语言时,我只会得到一个回调到onConfigChanged(),而不是完全重启。但是documentation 说我应该再次“检索所有资源”:

所有这些配置更改都会影响应用程序看到的资源值。因此,在调用 onConfigurationChanged() 时,通常需要再次检索所有资源(包括视图布局、可绘制对象等)以正确处理更改。

我的问题是,对于语言环境更改真的是这样吗?如果我有一个从不使用用户语言设置的假设应用程序,并且只使用 GLSurfaceView 呈现图形,那么忽略此事件是否安全?如果是这样,你能用文档备份吗?

忽略事件 似乎 正常运行,当我不使用任何语言环境时重新创建视图没有多大意义,但我想确定我我不会引入一些微妙的错误。

非常感谢任何信息。

【问题讨论】:

    标签: android glsurfaceview android-configchanges


    【解决方案1】:

    正如您所说,您的 GLSurfaceView 完全独立于语言环境,可以将 locale 添加到 configChanges,因为可以添加 keyboardscreenSize 如果您的布局永远不会根据这些配置而改变。

    编辑:文档:http://developer.android.com/guide/topics/resources/runtime-changes.html

    但是,您可能会遇到这样一种情况,即重新启动应用程序和恢复大量数据的成本可能会很高,并且会造成糟糕的用户体验。在这种情况下,您还有两个选择:

    [...]

    b.自行处理配置更改

    防止系统在某些配置更改期间重新启动您的 Activity,但在配置发生更改时接收回调,以便您可以根据需要手动更新您的 Activity。

    还有:http://developer.android.com/guide/topics/resources/runtime-changes.html#HandlingTheChange

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

    【讨论】:

    • TICK,但是如果有一些文档来支持它会很棒吗?
    • 我已经编辑了我的答案并提供了官方 Android 文档的链接。
    猜你喜欢
    • 2014-12-26
    • 2022-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-10
    相关资源
    最近更新 更多