android gifview 内存,一个对复用view下滑动流畅度优化,图片和内存处理,稳定性都非常强大的android开源框架...

github开源地址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的实现(对于https请求默认验证系统证书,若想保证https的高度安全,可使用框架内提供的单证书和多证书验证方法),也可自定义选择适合自己的http方式

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

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

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

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

预览图

4d10dd3c8ed00d5e3dcf6575429e8c24.png

14453bc7cca66ce50e88e5684d16b2b5.png

b15e3af85df90ca4e5e3100380a6e6fa.png

0c252e18d013ab0b583d21afb8fda339.png

1800b500d18de071dc3e0d102a2fe00d.png

78fdb15188a547864a126531b2ca796a.png

2c06e34eaa9d5e6a006141681aa00512.png

5f4c9bc2d89d3ca793add773bdf175f8.png

301231511d19686c1a7c9de9b5d272fc.png

d8184c04c77f3c32bbed853f4a4bcf00.png

框架静态图

e2bdc70ff3b3da87c03c99c13f8750ec.png

androidStudio Gradle导入:

先添加jitpack仓库:

allprojects {

repositories

}

}

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

dependencies {

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

}

1.发起一个普通post请求

StringRequest_Default stringRequest = new StringRequest_Default(url, Request.POST, baseActivity.activityKey, new Request.OnResponseListener() {

@Override

public void onSucce***esponse(String response) {

}

@Override

public void onErrorResponse(String error) {

}

}) {

@Override

public Map getBodyParams() {

Map bodyParams = new HashMap();

return bodyParams;

}

};

BeyondPhysicsManager.getInstance(baseActivity).addRequestWithSort(stringRequest);

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

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

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布局加入

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() {

@Override

public void onSucce***esponse(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() {

@Override

public void onSucce***esponse(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 crts = new ArrayList();

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) {

}

});

某言:

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值