保存小部件的数据

Saving data for widget

我创建了 RSS 小部件,它在 onUpdate 上获取数据并将其保存在文章对象的 ArrayList 中。每个对象 class 看起来像这样:

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 获取字符串,将其解码 为位图(如果它不为 null 或空),然后把它放在你的 ImageView 里。

这是 encode/decode 位图到字符串(反之亦然)的有用来源:

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

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