Android Volleyフレームワーク

3617 ワード

1、Volleyにはいったいどんな特徴があるのだろうか.
自動スケジューリングネットワーク要求複数同時ネットワーク接続標準的なHTTPキャッシュメカニズムを使用して、ディスクとメモリ応答の一貫したサポート要求優先度を維持することにより、キャンセル要求をサポートする強力なAPIをサポートし、単一の要求または複数のカスタマイズしやすい堅牢性をキャンセルすることができます.
2.VolleyのRequestQueueとRequest
RequestQueue要求を実行するための要求キューRequest要求オブジェクトを構築するために使用
Requestオブジェクトには、主にStringRequest応答の主体が文字列JsonArrayRequest送信および受信JSON配列JsonObjectRequest送信および受信JSONオブジェクトImageRequest送信および受信Image
3、使用
RequestQueue requestQueue = Volley.newRequestQueue(this);

Requestの作成
private final String url="...."
JsonObjectRequest  json_req=JsonObjectRequest(url,nul,new Response.Listener(){
       @Override
       public void onRespanse(JsonObject response){
     //      
           }   
       },
       new ResponseError.Listener(){
          @Override
          public voidbonResponseError(VollerError error){
             //    
          }
       }
           );

     requestQueue.add(jsonObjectRequest);

4、メモリ漏洩問題解決requestはActivityへの参照を持っており、Activityのメモリ漏洩方法の出所を招く
2つの方法:1.独自のRequestクラスを新規作成
public class MyStringRequest extends StringRequest{    
    public MyStringRequest(int method, String url, Response.Listener listener, Response.ErrorListener errorListener) {        
        super(method, url, listener, errorListener);    
    }    
    public MyStringRequest(String url, Response.Listener listener, Response.ErrorListener errorListener) {        
        super(url, listener, errorListener);    
    }    
    @Override    
    public void cancel(){        
        super.cancel();        
        onFinish();    
    }
}

onFinish関数はlistenerを直接空に設定し(onFinish関数はprotectedなのでサブクラスでしか呼び出せない)、cancel操作はerrorListenerを空に設定します.
2.弱引用を使用する現在の項目の大部分はMVPモードを使用しているが、一般的にはPresenterでResponseのインタフェースを実現し、使用する使用は直接XXXRequest request=new XXXXXRequest(method,url,this,this);
MyResponseListener:
public class MyResponseListener implements Response.Listener, Response.ErrorListener {    
    private WeakReference listenerRef;    
    private WeakReference errorRef;    
    public MyResponseListener(Response.Listener listener, Response.ErrorListener error) {        
        listenerRef = new WeakReference<>(listener);        
        errorRef = new WeakReference<>(error);   
    }    
    @Override    
    public void onErrorResponse(VolleyError error) {        
        if (errorRef.get()!=null){            
            errorRef.get().onErrorResponse(error);        
        }    
    }    
    @Override    
    public void onResponse(Object response) {       
        if (listenerRef.get()!=null){            
            listenerRef.get().onResponse(response);        
        }    
    }
}

BasePresenter:ここでは、new XXXXXXRequest(method,url,this,this)を直接使用することを防止するために、インタフェースをカスタマイズして、Presenterにこのインタフェースを実現させる保護を行うことができます.
public abstract class BasePresenter implements Response.Listener, Response.ErrorListener {                
    private MyResponseListener listener;    
    public BasePresenter() {        
        initListener();    
    }    
    protected void initListener() {        
        listener = new MyResponseListener(this, this);    
    }
    protected Response.Listener getListener(){    
        return listener;
    }
    protected Response.ErrorListener getErrorListener(){    
        return listener;
    }
}