Asynchttpurlconnection 网络框架 (HttpURLConnection+newCachedThreadPool)

本文介绍了一种基于HttpURLConnection和newCachedThreadPool的网络框架实现。框架包括Request、Response、ResponseListener等核心类,利用newCachedThreadPool的线程回收特性,简化网络请求流程。Request用于设置请求参数和响应体,Application中初始化线程池,Activity或Fragment通过实现ResponseListener接口接收返回数据。RequestParams用于存储请求参数,NetWorkThreadManager管理线程池,NetWorkRunnable处理网络请求并在子线程与主线程间传递信息。

看过git上volley和asynchttpclient网络框架的源码好长时间了,打算自己弄个网络框架是基于HttpURLConnection+newCachedThreadPool,目前httpclient已经被淘汰了,盛行的是HttpURLConnection,像volley和okhttp都主打HttpURLConnection,所以我弄了这个框架。

框架结构相对来说比较简单:Request、Response、ResponseListener、NewWorkManager、NewWorkRunnable、RequestParams、Erro等主要的类;
newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。基于这个优点所以我选择它。Request封装了请求参数和响应体,初始化线程池,完成整个请求过程。

Request主要用来初始化请求的参数和返回体等。首先要在Application里初始化initRequest()创建线程池。防止context内存泄漏采用了WeakReference引用;

public class Request {
    private static NetWorkThreadManager newtWorkInstance;
    //在application里初始化
    public static void initRequest(){
        newtWorkInstance = NetWorkThreadManager.getNetWorkThreadPoolInstance();
    }
    private WeakReference weakReference;
    private Activity activity;
    private Response<?> response;
    private RequestParams requestParams;
    private int tag;
    public Request(Response<?> response,Activity activity,RequestParams requestParams,int tag){
        weakReference = new WeakReference<Activity>(activity);
        this.response = response;
        this.requestParams = requestParams;
        this.tag = tag;
        this.activity = activity;
    }
    public Request(Response response,Fragment fragment,RequestParams requestParams,int tag){
        weakReference = new WeakReference<Fragment>(fragment);
        this.response = response;
        this.requestParams = requestParams;
        this.tag = tag;
        activity = fragment.getActivity();
    }
    private int requestType = 0;
    public void setRequestType(int requestType){
        this.requestType = requestType;
    }
    public int getRequestType(){
        return requestType;
    }
    public void requestStart(){
        if(!Utils.isNetworkAvailable(activity)){
            ((ResponseListener)weakReference.get()).onError(new Error("当前无网络"),tag);
            return;
        }
        response.getResponseListener().onBefore(tag);
        netWorkRunnable = new NetWorkRunnable(this);
        newtWorkInstance.cachedThreadPool.execute(netWorkRunnable);
    }
    private NetWorkRunnable netWorkRunnable;
    public RequestParams getRequestParams
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值