okhttpキャッシュポリシーをシミュレートしたデータキャッシュ


前に面接でよくどんな優秀なソースを見たことがあるか聞かれましたが、ああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああ例えば、okhttpのキャッシュポリシーは、okhttpのキャッシュは悪くありません.キャッシュが期限切れになっていない場合はそのまま使用します.キャッシュが期限切れになったら、期限切れにしてから、ネットワークで保存します.キャッシュがなくてから、ネットワークに接続して要求します.前にも面接シリーズのokhttpソースコードの概要を書いたことがあります.リンクを差し上げます.http://blog.csdn.net/carryqiang/article/details/78841254
自分ではちょっとひどいと思っていますが、純粋に面接に対応するために、今は自分のプロジェクトに統合されていますが、実はこの論理はとても簡単です.
トップページの内容を例にとると、トップページは往々にしてプロジェクトの精華であり、様々なタイプのlisetView、タイプ別RecyclerView、大量の集合データであるため、キャッシュは非常に重要である.コードロジックは次のとおりです.
まず、バックグラウンドから得られたjsonを簡単にカプセル化します.結局、キャッシュは時効性があります.
public class RecommendCache extends DataSupport implements Serializable{
    private String jsonStr;
    private long time;
    public String getJsonStr() {
        return jsonStr;
    }

    public void setJsonStr(String jsonStr) {
        this.jsonStr = jsonStr;
    }

    public long getTime() {
        return time;
    }

    public void setTime(long time) {
        this.time = time;
    }
}
コアのキャッシュロジック
RecommendCache cache = LitePalUtils.getInstance().getRecommendCache();
        
        if(cache != null && !TextUtils.isEmpty(cache.getJsonStr())) {
            Gson gson = new Gson();
            RecommendResponse cacheResponse = gson.fromJson(cache.getJsonStr(), RecommendResponse.class);
            //      
            if(cacheResponse != null) {
                long lastUpDate = cache.getTime();
                //     ,     ,      ,       120 
                if(System.currentTimeMillis() / 1000 - lastUpDate > 120) {
                    setCacheData(cacheResponse);
                    initListView(lvContent);
                } else {
                    //         
                    setData(cacheResponse);
                }
            } else {
                //      ,      ,         
                initListView(lvContent);
            }

        } else {
            
            initListView(lvContent);
        }
このLitePalUtilsは、データベースの操作クラスであり、データのアクセスに使用されます.InitListView()メソッドには、ネットワークとデータのロードの具体的な論理がカプセル化されています.