人生中的第一份博客,我想这是一个值得被认可的安卓框架吧

框架简介:

安卓开发框架,对第三方库无依赖,网络部分以继承和泛型方式实现了普通请求、图片请求三级缓存、下载、断点下载、上传请求的统一,复用view下面的图片滑动流畅度基本到极限了,也不会出现任何图片错乱,主线程取消请求后可立即释放所有对activity的引用,无内存泄漏,对UI层也有良好的封装使得对于recyclerView的开发变得非常的方便和高效

开源地址:https://github.com/xihuan22d/BeyondPhysics

相比其他开源框架的优点:

1.统一普通请求、图片请求三级缓存(支持gif)、下载、断点下载、上传请求,使得开发的软件不再是各种不同来源的开源框架糅合而成(网络框架,图片框架等等),且这5类请求是以继承和泛型方式实现的,从而使得可以被进一步继承达到自定义

2.使用其他开源框架不曾设想过的特殊请求分发处理架构,请求核心处理层使用LinkedHasMap替代BlockingQueue完成队列,使得请求可以被更良好的移除和管理(这样可以非常方便的立即移除无效请求和实现相同图片请求key的请求回调等),当然为了解决LinkedHasMap的缺陷,可以选择启用分发层,对流畅度要求高的部分请求通过分发层分发请求(由分发线程处理核心处理层),以便应对流畅度要求极高的场景(如图片滑动过程,下载列表获取下一页的下载进度),分发层使用BlockingQueue使得可以最大程度的和主线程脱关联,使用该分发架构不但可保证主线程的绝对流畅性,还保留了核心处理层使用LinkedHasMap所带来的各种优势,以及使得核心处理层的容器变得高度的面向对象

3.对内存严格的要求,通过大量的内存调试,保证框架极低的内存占用,图片下载完毕会通过缩放到指定大小获取即使下载的是大图也不会导致OutOfMemory的出现处理了所有可能出现内存泄漏的场景,主线程无论以何种方式取消请求该请求即可立即释放对activity的引用不存在内存泄漏

4.可高度自定义的接口实现的HttpAgreement,BitmapMemoryCache,BitmapDiskCacheAnalyze,对于HttpAgreement框架提供了俩种默认实现,系统的HttpURLConnection实现和OKhttp的实现,也可自定义选择适合自己的http方式

5.良好封装的recyclerView,使得对于recyclerView的开发变得非常的方便和高效,即便开发如多级评论这类复杂的复用模型也可以非常简便

6.提供阻塞方式取消请求和关闭线程池(该功能一般用于极限测试和极少数特殊场景使用)

7.高度面向对象,严格的编码命名风格和异常日志记录

8.作者花了大量的时间和心血验证调试这个框架,并提供了完整的demo,利用demo便可以非常方便的理解使用该框架,demo部分本身的结构便是一种非常可靠高效的开发模型,可用demo的结构直接应用于实际开发......

框架目录结构图:

框架静态图:

如何使用框架:

框架demo下载地址: http://47.97.113.47:4126/apks/beyondPhysics.apk

androidStudio Gradle导入:

先添加jitpack仓库:

allprojects {

repositories {  

    maven { url 'https://www.jitpack.io' }
	
}

}

接着导入项目依赖库即可:

dependencies {

implementation 'com.github.xihuan22d:BeyondPhysics:1.0'

}

demo程序预览图:

1.发起一个普通post请求

StringRequest_Default stringRequest = new StringRequest_Default(url, Request.POST, baseActivity.activityKey, new Request.OnResponseListener<String>() {
    @Override
    public void onSuccessResponse(String response) {
    
    }

    @Override
    public void onErrorResponse(String error) {
    
    }
}) {
    @Override
    public Map<String, String> getBodyParams() {
        Map<String, String> bodyParams = new HashMap<String, String>();
        return bodyParams;
    }
};
BeyondPhysicsManager.getInstance(baseActivity).addRequestWithSort(stringRequest);

建议所有的activity继承于框架内的BaseActivity,并且tag使用baseActivity.activityKey,可以保证activity销毁后请求不存在内存泄露问题,立即能释放请求占用的引用,避免短时间的内存泄露问题

2.发起一个普通图片请求

<com.beyondphysics.ui.views.NetworkImageView
    android:id="@+id/networkImageView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    />

NetworkImageViewHelp.getImageFromNetwork(NetworkImageView networkImageView, String urlString, String tag, int width, int height, int defaultResId, int errorResId);

建议对width和height进行计算后传入,这样对于图片的处理可以做到有多大取多大,可以大大减少图片的内存开销和图片解码过程的内存峰值

3.发起一个gif图片请求

xml布局加入

<com.beyondphysics.ui.views.NetworkGifImageView
    android:id="@+id/networkGifImageView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
/>

NetworkImageViewHelp.getImageFromNetwork(NetworkGifImageView networkGifImageView, String urlString, String tag, int width, int height, int defaultResId, int errorResId);

tag建议使用baseActivity.activityKey,可以保证activity销毁后请求不存在内存泄露问题,立即能释放请求占用的引用,避免短时间的内存泄露问题

4.下载和断点下载请求

BreakpointDownloadRequest<?> breakpointDownloadRequest = new BreakpointDownloadRequest_Default(url, savePath, -1, activityKey, new Request.OnResponseListener<String>() {
    @Override
    public void onSuccessResponse(String response) {

    }

    @Override
    public void onErrorResponse(String error) {
      
    }
}, 9, null, 8000, 22000, new BreakpointDownloadRequest.OnDownloadProgressListener() {
    @Override
    public void maxProgress(BreakpointDownloadRequest<?> breakpointDownloadRequest, int totalSize) {
    }

    @Override
    public void updateProgress(BreakpointDownloadRequest<?> breakpointDownloadRequest, int currentSize, int totalSize) {
      
    }
});
breakpointDownloadRequest.setReceiveCancel(true);
BeyondPhysicsManager.getInstance(BreakpointDownloadActivity.this).addRequest(breakpointDownloadRequest);

5.上传请求

UploadRequest_Default_Params uploadRequest_Default_Params = new UploadRequest_Default_Params();
uploadRequest_Default_Params.setUrlString(url);
uploadRequest_Default_Params.setNames(names);
uploadRequest_Default_Params.setValues(values);
uploadRequest_Default_Params.setFileNames(fileNames);
uploadRequest_Default_Params.setFilePaths(filePaths);
uploadRequest_Default_Params.setTag(baseActivity.activityKey);
uploadRequest_Default_Params.setOnResponseListener(new Request.OnResponseListener<String>() {
    @Override
    public void onSuccessResponse(String response) {
       
    }

    @Override
    public void onErrorResponse(String error) {
       
    }
});
uploadRequest_Default_Params.setOnUploadProgressListener(onUploadProgressListener);
UploadRequest_Default uploadRequest = new UploadRequest_Default(uploadRequest_Default_Params);
uploadRequest.setReceiveCancel(true);
BeyondPhysicsManager.getInstance(baseActivity).addRequestWithSort(uploadRequest);

6.可以非常方便的使用自定义证书的https

如:
public class HttpConnectTool {

    public static synchronized SSLSocketFactory getInstanceSslSocketFactory(Context context) {
        if (sslSocketFactory == null) {
            List<String> crts = new ArrayList<String>();
            crts.add("my.crt");
            crts.add("my1.crt");
            sslSocketFactory = SSLSocketTool.getSocketFactoryByKeyStore(SSLSocketTool.TYPE_ASSETS, crts, context);
        }
        return sslSocketFactory;
    }
}


stringRequest.setOnHttpStatusListener(new OnHttpStatusListener() {
    @Override
    public void onHttpInit(HttpURLConnection httpURLConnection, Object object) {

    }

    @Override
    public void onHttpsInit(HttpsURLConnection httpsURLConnection, Object object) {
        if (httpsURLConnection != null) {
            httpsURLConnection.setSSLSocketFactory(HttpConnectTool.getInstanceSslSocketFactory(TheApplication.getTheApplication()));
        }
    }

    @Override
    public void onHttpCompleted(HttpURLConnection httpURLConnection, Object object) {

    }

    @Override
    public void onHttpsCompleted(HttpsURLConnection httpsURLConnection, Object object) {

    }
});


stringRequest.setOnHttpStatusListener(new OnHttpStatusListener() {
    @Override
    public void onHttpInit(HttpURLConnection httpURLConnection, Object object) {

    }

    @Override
    public void onHttpsInit(HttpsURLConnection httpsURLConnection, Object object) {
        if (httpsURLConnection != null) {
            httpsURLConnection.setSSLSocketFactory(HttpConnectTool.getInstanceSslSocketFactory(TheApplication.getTheApplication()));
        }
    }

    @Override
    public void onHttpCompleted(HttpURLConnection httpURLConnection, Object object) {

    }

    @Override
    public void onHttpsCompleted(HttpsURLConnection httpsURLConnection, Object object) {

    }
});

某言:

介绍了框架内网络请求部分的简单使用教程,以上功能在demo里面均有对应的写法可参考,详细了解框架的使用流程可参照demo,总体而言,这个框架对于内存泄露溢出,和流畅度的优化还是非常强大的,诸如微信朋友圈这种对流畅度要求很高的图片结构甚至比glide的表现更加优秀

猜你喜欢

转载自blog.csdn.net/xihuan22d/article/details/80220900