【问题标题】:Correct way of detecting preference changes in a live wallpaper?检测动态壁纸偏好变化的正确方法?
【发布时间】:2011-11-22 16:50:01
【问题描述】:

我创建了一个带有偏好活动的动态壁纸。不幸的是,只要用户更改设置,就会调用 onSharedPreferenceChangeListener。侦听器调用了一些 CPU 密集型例程(重新初始化大型网格),因此它使偏好活动变得迟缓。如何仅在用户退出偏好活动时才调用侦听器?

【问题讨论】:

    标签: android sharedpreferences android-preferences live-wallpaper preferenceactivity


    【解决方案1】:

    获取SharedPreferences 对象的实例:

    SharedPreferences mPrefs = PreferenceManager.getDefaultSharedPreferences(context);
    

    然后注册一个SharedPreferences.OnSharedPreferenceChangeListener

    我通常让我的Engine 类实现SharedPreferences.OnSharedPreferenceChangeListener 接口,所以我只需在我的Engine 的构造函数中调用:

    mPrefs.registerOnSharedPreferenceChangeListener(this);
    

    然后只需在您的Engine 类中实现onSharedPreferenceChanged(SharedPreferences prefs, String key) 方法。

    如果你愿意,你也可以实现一个单独的类来充当OnSharedPreferenceChangeListener

    【讨论】:

    • 不,我已经这样做了。问题是 onSharedPreferences() 会随着每次偏好更改而重复调用。我希望它调用一次,最好在偏好活动退出时调用。
    【解决方案2】:

    也许您应该在您的preferenceActivity 中使用onPause 或onDestroy 来计算您的大网格。似乎您只想重新计算任何属性的更改,因此只需在 onPreferencesChanged 中设置一个标志并在活动关闭并返回 liveWallpaper-View 时进行数学运算。

    另一种方法是在并行线程中开始计算,让 preferenceActivity 正常运行。

    【讨论】:

    • 是的,这就是我最终所做的。我不知道这是否是“android”方式,但这是一种可行的解决方法
    猜你喜欢
    • 2011-09-16
    • 2012-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多