Androidは2次キャッシュメカニズムを構築
1412 ワード
2次キャッシュメカニズムとは、Android側がデータを取得する必要がある場合、まずメモリから検索(キー検索)し、メモリにないものはディスクファイルやsqliteから検索し、ディスクにもない場合はネットワークから取得することです.
ネットワークからのデータを取得すると、key-valueペアでメモリ(一級キャッシュ)にキャッシュされ、ファイルまたはsqlite(二級キャッシュ)にキャッシュされます.
メモリキャッシュはスタックメモリの漏洩を引き起こすため、1級キャッシュは通常、キャッシュのサイズを厳格に制御します.
ASimpleCacheは軽量レベルのオープンソースcacheフレームワークであり,著者らはそれを単純ACacheのjavaクラスに簡略化してカプセル化した.
時効性が非常に必要でないディスプレイページでは、初めてページに入るときに、ネットワークデータを要求する必要がなく、キャッシュを探してページにロードします.ユーザがリフレッシュを必要とする場合、ドロップダウン・リフレッシュなどで最新データonRefreshを要求し、今回リフレッシュしたデータを再度キャッシュして、時効時間を6時間リセットすることができます.時効性が過ぎた場合,ユーザは再びこのページにアクセスし,キャッシュデータを取得することができず,直接onrefreshがネットワークデータを要求する.(新浪微博のように、オフラインでも最後のリフレッシュ滞在のページデータを表示できます.)
ネットワークからのデータを取得すると、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")