前言
現在android網絡優化方案非常多,例如針對連接管理和緩存的優化方案,例如:okhttp,針對數據傳輸數據壓縮的優化方案,例如:protobuf;今天介紹一個通過修改調用方式優化的方案:網絡預加載框架- pre-network。
項目地址:https://github.com/woshiliyihang/pre-network
項目介紹
pre-network是一款android網絡框架,更加準確的說法是觀察者模式預處理器;它主要的特點是預處理網絡加載,設計思想是使用觀察者模式的訂閱式網絡框架。
軟件架構
基于觀察者模式的設計,每個網絡請求相當于一個被觀察者,每個使用這個網絡請求地方只需要添加觀察者,就可以獲取網絡請求數據,每個網絡請求必須是唯一的,可以添加多個觀察者。
安裝教程
- 引用依賴
implementation 'com.liyihang:pre-network:1.3.0'
使用說明
- 發起網絡請求
dome當中MainActivity點擊跳頁按鈕打開新activity時候首先執行網絡請求,然后執行跳轉。
Map<String, String> headers=new HashMap<>();
headers.put("headerInfo", "test");
//第一個參數 是標識網絡請求的唯一id,第二個參數是url, 第三個參數是請求參數,第四個參數是請求頭部,第五個參數是請求方式。
PreNetworkHelper.getInstance().addRequestObservable(new PNQuickRequest(url_id_only, "https://blog.csdn.net/mhhyoucom/","name=liyihang&age=18", headers, "GET"));
addRequestObservable 是簡單封裝唯一網絡請求,可以根據項目請求使用自己的網絡框架。這樣網路請求將立即執行。
- 訂閱這個網絡請求
dome中的OtherActivity就是要訂閱這個網絡請求。使用下面代碼訂閱:
PreNetworkHelper.getInstance().addObserver(new UpdateUI(this));
UpdateUI 就是訂閱者;
public class UpdateUI extends PNBaseObserver {
private WeakReference<OtherActivity> activity;
public UpdateUI(OtherActivity activity) {
this.activity = new WeakReference<>(activity);
}
@Override
public void pre() {//訂閱回調開始
// 刪除網絡請求被觀察者,如果不刪除一直保存在內存中
PreNetworkHelper.getInstance().removeRequestObservable(MainActivity.url_id_only);
}
@Override
public void result(String res) {//網絡請求成功處理函數
if (activity.get()==null)
return;
activity.get().sendStateSelf(PNBaseActivity.getMsgObj(10, res));
}
@Override
public void error(String err) {//網絡請求失敗處理函數
Toast.makeText(activity.get(), err, Toast.LENGTH_LONG).show();
}
@Override
public void end() {// 訂閱回調結束
}
@Override
public String getId() {
return MainActivity.url_id_only;//要訂閱的網絡請求唯一id
}
}
所有回調都在UI線程中。
參與貢獻
- 李一航