Android AppWidget - 如何缓存我自己的 class?

Android AppWidget - how to cache my own class?

我正在开发一个 AppWidget 来检索 JSON url 并显示它。我还显示了小部件上次更新的时间 TextView,显示类似 "last updated: 9.00am" 的内容。注意这里应该是相对时间,也就是我不想显示"last updated: 27/8/2015 9.00am"。如果小部件一天没有更新,它应该显示"last updated: yesterday"。

存在互联网连接时没有问题,但是当没有互联网连接时,我想继续显示以前的结果并更新 "last updated" TextView,即计算现在之间的相对时间字符串以及上次更新的时间。我如何缓存这些信息?

受到 this widget 的启发,我正在使用自定义 ClientCache.java class

import android.util.SparseArray;

public class ClientCache
{
    private static SparseArray<ChannelFeedData> cache = new SparseArray<ChannelFeedData>();

    private ClientCache() {}

    public static void update(int appWidgetId, ChannelFeedData cfd)
    {
        cache.put(appWidgetId, cfd);
    }

    public static ChannelFeedData fetch(int appWidgetId)
    {
        return cache.get(appWidgetId);
    }

    public static void remove(int appWidget)
    {
        cache.remove(appWidget);
    }

    public static boolean isCached(int appWidget)
    {
        return fetch(appWidget) != null;
    }
}

我的 ChannelFeedData class 包含一个在检索时存储的方法,但调用 isCached returns false 如果小部件在与此同时。

即使我的 AppWidget 被系统杀死并不时恢复,我如何缓存我自己的 class?

也许使用 SharedPreferences

SharedPreferences pref = context.getSharedPreferences("pref_name", Context.MODE_PRIVATE);
        pref.edit().putString("update_key", "data to be saved");    //save data
        pref.edit().commit();   

        String s = pref.getString("update_key", "empty");       //get data