一个对复用view下滑动流畅度优化,图片和内存处理,稳定性都非常强大的android开源框架(beyondPhysics)...
github開(kāi)源地址https://github.com/xihuan22d/BeyondPhysics
你的收藏是作者前進(jìn)的動(dòng)力哦,歡迎在github留星哦, 歡迎阿里的大牛們給予寶貴的意見(jiàn)...
框架demo下載地址: http://47.97.113.47:4126/apks/beyondPhysics.apk
相比其他開(kāi)源框架的優(yōu)點(diǎn):
1.對(duì)第三方庫(kù)無(wú)依賴,統(tǒng)一普通請(qǐng)求、圖片請(qǐng)求三級(jí)緩存(支持gif)、下載、斷點(diǎn)下載、上傳請(qǐng)求,使得開(kāi)發(fā)的軟件不再是各種不同來(lái)源的開(kāi)源框架糅合而成(網(wǎng)絡(luò)框架,圖片框架等等,可減少不必要的性能開(kāi)銷和縮小apk體積,開(kāi)發(fā)一般的android軟件apk可以很容易的控制在3m到4m之間),且這5類請(qǐng)求是以繼承和泛型方式實(shí)現(xiàn)的,從而使得可以被進(jìn)一步繼承達(dá)到自定義
2.使用其他開(kāi)源框架不曾設(shè)想過(guò)的特殊請(qǐng)求分發(fā)處理架構(gòu),請(qǐng)求核心處理層使用LinkedHasMap替代BlockingQueue完成隊(duì)列,使得請(qǐng)求可以被更良好的移除和管理(這樣可以非常方便的立即移除無(wú)效請(qǐng)求和實(shí)現(xiàn)相同圖片請(qǐng)求key的請(qǐng)求回調(diào)等),當(dāng)然為了解決LinkedHasMap的缺陷,可以選擇啟用分發(fā)層,對(duì)流暢度要求高的部分請(qǐng)求通過(guò)分發(fā)層分發(fā)請(qǐng)求(由分發(fā)線程處理核心處理層),以便應(yīng)對(duì)流暢度要求極高的場(chǎng)景(如圖片滑動(dòng)過(guò)程,下載列表獲取下一頁(yè)的下載進(jìn)度),分發(fā)層使用BlockingQueue使得可以最大程度的和主線程脫關(guān)聯(lián),使用該分發(fā)架構(gòu)不但可保證主線程的絕對(duì)流暢性,還保留了核心處理層使用LinkedHasMap所帶來(lái)的各種優(yōu)勢(shì),以及使得核心處理層的容器變得高度的面向?qū)ο?/p>
3.對(duì)內(nèi)存嚴(yán)格的要求,通過(guò)大量的內(nèi)存調(diào)試,保證框架極低的內(nèi)存占用,圖片下載完畢會(huì)通過(guò)縮放到指定大小獲取,即使下載的是大圖也不會(huì)導(dǎo)致OutOfMemory的出現(xiàn),處理了所有可能出現(xiàn)內(nèi)存泄漏的場(chǎng)景,主線程無(wú)論以何種方式取消請(qǐng)求,該請(qǐng)求即可立即釋放對(duì)activity的引用不存在內(nèi)存泄漏
4.可高度自定義的接口實(shí)現(xiàn)的HttpAgreement,BitmapMemoryCache,BitmapDiskCacheAnalyze,對(duì)于HttpAgreement框架提供了倆種默認(rèn)實(shí)現(xiàn),系統(tǒng)的HttpURLConnection實(shí)現(xiàn)和OKhttp的實(shí)現(xiàn)(對(duì)于https請(qǐng)求默認(rèn)驗(yàn)證系統(tǒng)證書(shū),若想保證https的高度安全,可使用框架內(nèi)提供的單證書(shū)和多證書(shū)驗(yàn)證方法),也可自定義選擇適合自己的http方式
5.良好封裝的recyclerView,使得對(duì)于recyclerView的開(kāi)發(fā)變得非常的方便和高效,即便開(kāi)發(fā)如多級(jí)評(píng)論這類復(fù)雜的復(fù)用模型也可以非常簡(jiǎn)便
6.提供阻塞方式取消請(qǐng)求和關(guān)閉線程池(該功能一般用于極限測(cè)試和極少數(shù)特殊場(chǎng)景使用)
7.高度面向?qū)ο?#xff0c;嚴(yán)格的編碼命名風(fēng)格和異常日志記錄
8.作者花了大量的時(shí)間和心血驗(yàn)證調(diào)試這個(gè)框架,并提供了完整的demo,利用demo便可以非常方便的理解使用該框架,demo部分本身的結(jié)構(gòu)便是一種非常可靠高效的開(kāi)發(fā)模型,可用demo的結(jié)構(gòu)直接應(yīng)用于實(shí)際開(kāi)發(fā)......
預(yù)覽圖
框架靜態(tài)圖
https://github.com/xihuan22d/BeyondPhysics/raw/master/screenshot/beyondPhysics.png
androidStudio Gradle導(dǎo)入:
先添加jitpack倉(cāng)庫(kù):
allprojects {repositories { maven { url 'https://www.jitpack.io' }}}接著導(dǎo)入項(xiàng)目依賴庫(kù)即可:
dependencies {implementation 'com.github.xihuan22d:BeyondPhysics:1.0'}1.發(fā)起一個(gè)普通post請(qǐng)求
StringRequest_Default stringRequest = new StringRequest_Default(url, Request.POST, baseActivity.activityKey, new Request.OnResponseListener<String>() {@Overridepublic void onSuccessResponse(String response) {}@Overridepublic void onErrorResponse(String error) {} }) {@Overridepublic Map<String, String> getBodyParams() {Map<String, String> bodyParams = new HashMap<String, String>();return bodyParams;} }; BeyondPhysicsManager.getInstance(baseActivity).addRequestWithSort(stringRequest);建議所有的activity繼承于框架內(nèi)的BaseActivity,并且tag使用baseActivity.activityKey,可以保證activity銷毀后請(qǐng)求不存在內(nèi)存泄露問(wèn)題,立即能釋放請(qǐng)求占用的引用,避免短時(shí)間的內(nèi)存泄露問(wèn)題
2.發(fā)起一個(gè)普通圖片請(qǐng)求
<com.beyondphysics.ui.views.NetworkImageViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"/> //獲得圓角圖片(將在線程內(nèi)執(zhí)行圓角轉(zhuǎn)換,保證主線程的流暢性)<com.beyondphysics.ui.views.RoundedNetworkImageViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"app:circleBorderColor="#ffffff"app:circleBorderWidth="1dp"app:roundedType="circleBorder" />NetworkImageViewHelp.getImageFromNetwork(NetworkImageView networkImageView, String urlString, String tag, int width, int height, int defaultResId, int errorResId);建議對(duì)width和height進(jìn)行計(jì)算后傳入,這樣對(duì)于圖片的處理可以做到有多大取多大,可以大大減少圖片的內(nèi)存開(kāi)銷和圖片解碼過(guò)程的內(nèi)存峰值,tag建議使用baseActivity.activityKey,可以保證activity銷毀后請(qǐng)求不存在內(nèi)存泄露問(wèn)題,立即能釋放請(qǐng)求占用的引用,避免短時(shí)間的內(nèi)存泄露問(wèn)題
3.發(fā)起一個(gè)gif圖片請(qǐng)求(包含NetworkImageView的所有功能,相比NetworkImageView,NetworkGifImageView的實(shí)現(xiàn)更為復(fù)雜,如果明確不包含gif或者只需要解析gif的第一張圖片建議使用NetworkImageView獲得更優(yōu)的性能)
xml布局加入
<com.beyondphysics.ui.views.NetworkGifImageViewandroid:layout_width="wrap_content"android:layout_height="wrap_content" /> //獲得圓角圖片(將在線程內(nèi)執(zhí)行圓角轉(zhuǎn)換,保證主線程的流暢性)<com.beyondphysics.ui.views.RoundedNetworkGifImageViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"app:circleBorderColor="#ffffff"app:circleBorderWidth="1dp"app:roundedType="circleBorder" />NetworkGifImageViewHelp.getImageFromNetwork(NetworkGifImageView networkGifImageView, String urlString, String tag, int width, int height, int defaultResId, int errorResId);4.下載和斷點(diǎn)下載請(qǐng)求
BreakpointDownloadRequest<?> breakpointDownloadRequest = new BreakpointDownloadRequest_Default(url, savePath, -1, activityKey, new Request.OnResponseListener<String>() {@Overridepublic void onSuccessResponse(String response) {}@Overridepublic void onErrorResponse(String error) {} }, 9, null, 8000, 22000, new BreakpointDownloadRequest.OnDownloadProgressListener() {@Overridepublic void maxProgress(BreakpointDownloadRequest<?> breakpointDownloadRequest, int totalSize) {}@Overridepublic void updateProgress(BreakpointDownloadRequest<?> breakpointDownloadRequest, int currentSize, int totalSize) {} }); breakpointDownloadRequest.setReceiveCancel(true); BeyondPhysicsManager.getInstance(BreakpointDownloadActivity.this).addRequest(breakpointDownloadRequest);5.上傳請(qǐng)求
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>() {@Overridepublic void onSuccessResponse(String response) {}@Overridepublic 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.可以非常方便的使用自定義證書(shū)的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() {@Overridepublic void onHttpInit(HttpURLConnection httpURLConnection, Object object) {}@Overridepublic void onHttpsInit(HttpsURLConnection httpsURLConnection, Object object) {if (httpsURLConnection != null) {httpsURLConnection.setSSLSocketFactory(HttpConnectTool.getInstanceSslSocketFactory(TheApplication.getTheApplication()));}}@Overridepublic void onHttpCompleted(HttpURLConnection httpURLConnection, Object object) {}@Overridepublic void onHttpsCompleted(HttpsURLConnection httpsURLConnection, Object object) {} });末言:
介紹了框架內(nèi)網(wǎng)絡(luò)請(qǐng)求部分的簡(jiǎn)單使用教程,以上功能在demo里面均有對(duì)應(yīng)的寫(xiě)法可參考,詳細(xì)了解框架的使用流程可參照demo,總體而言,這個(gè)框架對(duì)于內(nèi)存泄露溢出,和流暢度的優(yōu)化還是非常強(qiáng)大的,諸如微信朋友圈這種對(duì)流暢度要求很高的圖片結(jié)構(gòu)甚至比glide的表現(xiàn)更加優(yōu)秀
總結(jié)
以上是生活随笔為你收集整理的一个对复用view下滑动流畅度优化,图片和内存处理,稳定性都非常强大的android开源框架(beyondPhysics)...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 白色Cruze修改(Cruze修改图片大
- 下一篇: set和dict理论和操作