由于在意外地触发onSharedPreferenceChanged()
的情况下,在 Moto Z2 Play Android 8.0.0 上运行的应用程序开始出现奇怪的崩溃,但在模拟器上却没有,
经调查,我发现首选项“ variations_seed_native_stored ”已由“某人”更改,这不是我的应用程序(看起来它来自Chromium / WebView,我确实在该应用程序。)
这是预期的行为吗? “ SharedPreferences”中的“ Shared”意味着多余的偏好可以存储在这里吗?
如果是这样,如果我真的共享名称空间,我如何确保我没有首选项名称冲突?
特定详细信息:
在onSharedPreferenceChanged()
中,我在RecyclerView上调用了notifyDataSetChanged()
(因为设置将更改数据的显示方式),但是意外的“ variations_seed_native_stored ”会创建“无法调用此RecyclerView正在计算布局时使用“方法”。-ViewHolder中有一个WebView,我想它会引起循环调用。发生此错误后,AndroidWebView中有一个很长的Breakpad Microdump:69.0.34.97.100。
在用户具有“将首选项重置为默认值”之后,这种情况只会发生一次,因为我执行了“ prefs.edit().clear().apply()
”,删除了“ variations_seed_native_stored ”,从而使WebView(?)下次我更新RecyclerView时再次将其写入,触发崩溃。
是的,如果密钥=“ variations_seed_native_stored ”,我可以通过在onSharedPreferenceChanged()
上不执行任何操作来解决此问题,但是我会担心google决定存储的每个新偏好设置矿。是否建议我根据自己的偏好列表“过滤” onSharedPreferenceChanged()
?
谢谢!
答案 0 :(得分:1)
SharedPreferences
不应保存许多数据。用另一个名称创建一个SharedPreference
,并确保它仅由您的代码使用。