在Appwidget中缓存位图

时间:2011-07-25 14:17:33

标签: android caching bitmap android-widget android-appwidget

我正在构建一个AppWidget,我希望通过允许用户从中央存储库下载皮肤来进行换肤。

我正在将构成皮肤的png复制到widget的私有目录中。我正在从这个目录加载位图并制作我存储在静态HashMap中的Bitmaps,以避免每次都加载它们。

我意识到这不会起作用,因为HashMap在某些时候是垃圾收集的(通常是几个小时后)。我意识到每次都可以从磁盘加载位图,但这很可能会很慢并耗尽电池。

有没有更好的缓存此类数据的方法?

1 个答案:

答案 0 :(得分:0)

从查看Google标准“电源控制”窗口小部件的源代码

https://android.googlesource.com/platform/packages/apps/Settings/+/master/src/com/android/settings/widget/SettingsAppWidgetProvider.java

我发现我需要在DONT_KILL_APP

中设置onEnabled
@Override
public void onEnabled(Context context) {
    PackageManager pm = context.getPackageManager();
    pm.setComponentEnabledSetting(
            new ComponentName("com.android.settings", ".widget.SettingsAppWidgetProvider"),
            PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
            PackageManager.DONT_KILL_APP);
}

并在onDisabled

中再次取消设置
@Override
public void onDisabled(Context context) {
    PackageManager pm = context.getPackageManager();
    pm.setComponentEnabledSetting(
            new ComponentName("com.android.settings", ".widget.SettingsAppWidgetProvider"),
            PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
            PackageManager.DONT_KILL_APP);
}

这似乎适合我,设置保留了一夜之间(以前没有)。