Android第三方異步網路加載庫AsyncHttpClient內部實現緩存策略瞭嗎?

已邀請:

抽獎

贊同來自:





Android第三方異步網路加載庫AsyncHttpClient內部實現緩存策略瞭嗎?


Android平臺上的AsyncHttpClient是一款比較流行的Android異步網路加載庫,在github上的網址是:https://github.com/loopj/android-async-http

但是AsyncHttpClient和另外比較著名的Android異步網絡庫 Volley和Glide不同的是,不像Volley和Glide內部已經實現好瞭緩存策略,AsyncHttpClient自身沒有實現緩存策略。

實驗可以表明這點。

實驗方法:我寫一個簡單的Android小程序,僅僅加載一張從網絡獲取的圖片(我的CSDN博客頭像),在聯網時候啟動這個程序,然後關閉手機設備的所以網絡連接,此時再次啟動該程序。

先給出測試的程序所有代碼:

測試的主Activity:MainActivity.java



package zhangphil.http;

import org.apache.http.Header;

import com.loopj.android.http.AsyncHttpClient;
import com.loopj.android.http.AsyncHttpResponseHandler;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.widget.ImageView;

public class MainActivity extends Activity {

private final String url = "http://avatar.csdn.net/9/7/A/1_zhangphil.jpg";

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

final ImageView imageView = (ImageView) findViewById(R.id.imageView);

AsyncHttpClient httpclient = new AsyncHttpClient();

httpclient.get(url, new AsyncHttpResponseHandler() {

@Override
public void onSuccess(int statusCode, Header[] headers,
byte[] response) {

BitmapFactory bitmapFactory = new BitmapFactory();
Bitmap bitmap = bitmapFactory.decodeByteArray(response, 0,
response.length);
imageView.setImageBitmap(bitmap);
}

@Override
public void onFailure(int statusCode, Header[] headers,
byte[] response, Throwable error) {
error.printStackTrace();
}
});
}
}

佈局文件activity_main.xml僅僅隻有一個id為imageView的ImageView元素,在此不在贅述。


測試時候不要忘記添加網絡訪問權限,除此之外,我特意給這個測試程序添加瞭讀寫Android存儲設備的權限。

實驗發現,在聯網狀態下,ImageView的圖片可以加載出來,在斷網情況下ImageView無法加載出來,在錯誤日志中同樣說明每次啟動程序AsyncHttpClient都同樣的去聯網,即便是相同的URL資源。

查看AsyncHttpClient的源代碼(截止本文寫作時候的版本android-async-http-1.4.8,時間是2015年9月20,也許在未來,作者不排除像Android Volley或者Glide那樣在內部把緩存策略一並實現),果然,AsyncHttpClient內部沒有實現緩存策略。

這樣就使得開發者在使用AsyncHttpClient時候需要特別註意,當代碼中需要實現或者使用緩存時候,AsyncHttpClient無能為力,必須自己寫一套緩存策略,或者僅僅使用AsyncHttpClient加載一些對緩存不敏感的代碼開發場景,在一些緩存敏感(比如代碼需要頻繁的從網絡讀取大圖片,但這些大圖片數據在較短時間內是相同的)場景,可以考慮使用Android Volley或者Glide(Android Volley更深度的使用緩存,甚至在網絡請求json數據時候也會不失時機的緩存!)。但是AsyncHttpClient有一個好處:就是在處理http網絡數據交互時候,代碼運行比較穩定。


附我寫的一些參考文章:

Android圖片加載與緩存開源框架:Android Glide》

文章鏈接:http://blog.csdn.net/zhangphil/article/details/45535693


版權聲明:本文為ZhangPhil原創文章,歡迎轉載!但請註明轉載出處:http://blog.csdn.net/zhangphil

要回復問題請先登錄註冊