Androidは2次キャッシュメカニズムを構築

1412 ワード

2次キャッシュメカニズムとは、Android側がデータを取得する必要がある場合、まずメモリから検索(キー検索)し、メモリにないものはディスクファイルやsqliteから検索し、ディスクにもない場合はネットワークから取得することです.
ネットワークからのデータを取得すると、key-valueペアでメモリ(一級キャッシュ)にキャッシュされ、ファイルまたはsqlite(二級キャッシュ)にキャッシュされます.
メモリキャッシュはスタックメモリの漏洩を引き起こすため、1級キャッシュは通常、キャッシュのサイズを厳格に制御します.
ASimpleCacheは軽量レベルのオープンソースcacheフレームワークであり,著者らはそれを単純ACacheのjavaクラスに簡略化してカプセル化した.
 private ACache acache;
 acache = ACache.get(getActivity());
 JSONObject cache_List = (JSONObject) acache.getAsJSONObject("list");
    if(cache_List != null) {
        CHBRsp result = new CHBRsp(CHBRsp.CodeSucess, "", cache_List );
        loadDataSucess(result);
    } else{
        onRefresh();
    }

 private void loadDataSucess(CHBRsp result) {
    //             ,     
    if(page == 1) {
        JSONObject json = result.tryExtra(JSONObject.class);
        //      6  
        acache.put("list", json, 60*60*6);
    }
    //*******
}

時効性が非常に必要でないディスプレイページでは、初めてページに入るときに、ネットワークデータを要求する必要がなく、キャッシュを探してページにロードします.ユーザがリフレッシュを必要とする場合、ドロップダウン・リフレッシュなどで最新データonRefreshを要求し、今回リフレッシュしたデータを再度キャッシュして、時効時間を6時間リセットすることができます.時効性が過ぎた場合,ユーザは再びこのページにアクセスし,キャッシュデータを取得することができず,直接onrefreshがネットワークデータを要求する.(新浪微博のように、オフラインでも最後のリフレッシュ滞在のページデータを表示できます.)
 //      ,       ,           
 acache.put(key,data,time) acache.put(key,data)
 //      ,  JSONObject 
 acache.getAsJSONObject("list")