【问题标题】:Saving data for widget为小部件保存数据
【发布时间】:2020-02-12 08:59:36
【问题描述】:

我创建了 RSS 小部件,它在 onUpdate 上获取数据并将其保存在文章对象的 ArrayList 中。每个 Object 类如下所示:

public class Story {
    private String title;
    private String link;
    private Date pubDate;
    private String imgUrl;
    private Bitmap img;
    private String content;
}

它保存数据以及位图格式的图像(非常小的图像)。小部件的工作原理是这样的,在小部件上按左右按钮时,它会在来自 ArrayList 的故事之间循环。我可以看到数据在 ArrayList 中保存了大约 12-24 小时,然后小部件不再工作。

  1. 为这样的小部件存储数据的最佳方式是什么?
  2. 小部件中全局变量的预期寿命是多少?

【问题讨论】:

  • 为什么不在 SharedPreferences 中存储数据?
  • 是否建议在 SharedPreferences 中存储带有图像的类?
  • 我从未尝试过专门针对小部件,但如果数据不重要,那么您可以保存在首选项中。
  • 看看Data and file storage overview。如果您想保留数据,我会考虑使用 Room 数据库。

标签: android android-widget


【解决方案1】:

当您检索数据(包括您需要的位图)时,将您的位图编码为字符串,然后将字符串放入 SharedPreferences 中。

你会想要改变你的图像加载方法,首先从 SharedPreferences 中获取字符串,decode 将其转换为位图(如果它不为 null 或为空),然后将其放入 ImageView .

这是将位图编码/解码为字符串(反之亦然)的有用来源:

How many ways to convert bitmap to string and vice-versa?

注意:这在Bitmap的尺寸非常小的情况下是相当有效的。否则,您需要使用 GlidePicasso 之类的东西来帮助您进行位图缓存。

【讨论】:

    猜你喜欢
    • 2012-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多