首页 > 解决方案 > onSharedPreferenceChanged 和variations_seed_native_stored

问题描述

我在Moto Z2 Play Android 8.0.0(但不是在模拟器上)上运行的应用程序开始出现奇怪的崩溃,因为onSharedPreferenceChanged()被意外触发。

经过调查,我发现偏好“ variations_seed_native_stored ”正在被“某人”更改,这不是我的应用程序(看起来它来自我在应用程序中使用的 Chromium/WebView)。

这是预期的行为吗?“SharedPreferences”中的“Shared”意味着可以将无关的偏好存储在那里?

如果是这样,如果我真的在共享名称空间,我将如何确保我没有偏好名称冲突?

具体细节:

onSharedPreferenceChanged()我在 RecyclerView 上调用 a notifyDataSetChanged()(因为设置会改变数据的呈现方式),但意外的“ variations_seed_native_stored ”创建了一个“在 RecyclerView 计算布局时无法调用此方法” - ViewHolder 中有一个 WebView,我想它导致循环调用。出现此错误后,AndroidWebView:69.0.34.97.100 会出现一个很长的 Breakpad Microdump。

这只会发生一次,在用户“将首选项重置为默认值”之后,因为我做了一个“ prefs.edit().clear().apply()”,它删除了“ variations_seed_native_stored ”,使得 WebView(?) 在下次更新 RecyclerView 时再次写入,触发崩溃.

onSharedPreferenceChanged()是的,我可以通过对if 键 =“ variations_seed_native_stored ”什么都不做来解决这个问题,但是我会担心谷歌决定与我一起存储的每一个新偏好。是否建议我onSharedPreferenceChanged()根据自己的偏好列表“过滤”?

谢谢!

标签: javaandroid

解决方案


SharedPreferences不应该保存很多数据。使用另一个名称创建一个SharedPreference并确保它仅由您的代码使用。


推荐阅读