日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2023/12/31 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一个对复用view下滑动流畅度优化,图片和内存处理,稳定性都非常强大的android开源框架(beyondPhysics)... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

你的收藏是作者前進的動力哦,歡迎在github留星哦, 歡迎阿里的大牛們給予寶貴的意見...

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

相比其他開源框架的優點:

1.對第三方庫無依賴,統一普通請求、圖片請求三級緩存(支持gif)、下載、斷點下載、上傳請求,使得開發的軟件不再是各種不同來源的開源框架糅合而成(網絡框架,圖片框架等等,可減少不必要的性能開銷和縮小apk體積,開發一般的android軟件apk可以很容易的控制在3m到4m之間),且這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的結構直接應用于實際開發......

預覽圖








框架靜態圖

https://github.com/xihuan22d/BeyondPhysics/raw/master/screenshot/beyondPhysics.png

androidStudio Gradle導入:

先添加jitpack倉庫:

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

接著導入項目依賴庫即可:

dependencies {implementation 'com.github.xihuan22d:BeyondPhysics:1.0'}

1.發起一個普通post請求

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繼承于框架內的BaseActivity,并且tag使用baseActivity.activityKey,可以保證activity銷毀后請求不存在內存泄露問題,立即能釋放請求占用的引用,避免短時間的內存泄露問題

2.發起一個普通圖片請求

<com.beyondphysics.ui.views.NetworkImageViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"/> //獲得圓角圖片(將在線程內執行圓角轉換,保證主線程的流暢性)<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);

建議對width和height進行計算后傳入,這樣對于圖片的處理可以做到有多大取多大,可以大大減少圖片的內存開銷和圖片解碼過程的內存峰值,tag建議使用baseActivity.activityKey,可以保證activity銷毀后請求不存在內存泄露問題,立即能釋放請求占用的引用,避免短時間的內存泄露問題

3.發起一個gif圖片請求(包含NetworkImageView的所有功能,相比NetworkImageView,NetworkGifImageView的實現更為復雜,如果明確不包含gif或者只需要解析gif的第一張圖片建議使用NetworkImageView獲得更優的性能)

xml布局加入

<com.beyondphysics.ui.views.NetworkGifImageViewandroid:layout_width="wrap_content"android:layout_height="wrap_content" /> //獲得圓角圖片(將在線程內執行圓角轉換,保證主線程的流暢性)<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.下載和斷點下載請求

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.上傳請求

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.可以非常方便的使用自定義證書的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) {} });

末言:
介紹了框架內網絡請求部分的簡單使用教程,以上功能在demo里面均有對應的寫法可參考,詳細了解框架的使用流程可參照demo,總體而言,這個框架對于內存泄露溢出,和流暢度的優化還是非常強大的,諸如微信朋友圈這種對流暢度要求很高的圖片結構甚至比glide的表現更加優秀

總結

以上是生活随笔為你收集整理的一个对复用view下滑动流畅度优化,图片和内存处理,稳定性都非常强大的android开源框架(beyondPhysics)...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。