導航:首頁 > 操作系統 > android預載入圖片

android預載入圖片

發布時間:2022-12-29 17:24:35

android 載入大量圖片速度慢是什麼原因,是訪問sd卡慢,還是使用bitmap的時候慢

android 載入大量圖片速度慢原因一般是訪問sd卡慢,SD卡讀取速度較慢造成的載入文件速度慢。
載入,漢語詞語,字面意思是增加裝載量。現多用於計算機相關領域,表示啟動程序時文件或信息的載入。
點陣圖文件(Bitmap),擴展名可以是.bmp或者.dib。點陣圖是Windows標准格式圖形文件,它將圖像定義為由點(像素)組成,每個點可以由多種色彩表示,包括2、4、8、16、24和32位色彩。例如,一幅1024×768解析度的32位真彩圖片,其所佔存儲位元組數為:1024×768×32/8=3072KB
點陣圖文件圖像效果好,但是非壓縮格式的,需要佔用較大存儲空間,不利於在網路上傳送。jpg格式則恰好彌補了點陣圖文件這個缺點。

㈡ Android圖片載入及虛化效果

[TOC]

使用如下方式載入圖片

會導致OOM,android對於直接通過資源id載入的資源需做cache,下次再需要此資源的時候直接從cache中得到。但這樣做也造成了用過的資源都會在內存中,這樣的設計不是很適合使用了很多大圖片資源的應用,這樣累積下來應用的內存峰值是很高的。

當使用諸如
imageView.setBackgroundResource
imageView.setImageResource
BitmapFactory.decodeResource
這樣的方法來設置一張大圖片時,在完成decode後,最終都是通過java層的createBitmap來完成的,需要消耗更多內存。因此,改用先通過BitmapFactory.decodeStream方法,創建出一個bitmap,再將其設為ImageView的 source,decodeStream最大的秘密在於其直接調用JNI>>nativeDecodeAsset()來完成decode,無需再使用java層的createBitmap,從而節省了java層的空間。如果在讀取時加上圖片的Config參數,可以有效減少載入的內存,從而有效阻止拋OOM異常。

實際使用中,可以針對bitmap做如下操作

RenderScript是Google在API11中引入的類,可看作業android內置的圖片處理框架(區別於Glide等圖片處理框架,RenderScript注重於圖片的處理而不是載入)。RenderScript實際操作基於RenderScript Intrinsics,一些可以幫助RenderScript快速實現各種圖片處理的操作類。該類包含諸多操作功能,比如利用ScriptIntrinsicBlur,就可以簡單高效地實現高斯模糊效果,可通過參數radius設置虛化的程度。

1920*1080的原始圖片未經壓縮讀取時間可能會超過1s,使用該圖片作為背景圖片載入時會有明顯的卡頓。此時就需要設置BitmapFactory.Options實現對待載入圖片的壓縮。可參照 https://blog.csdn.net/u012124438/article/details/66087785 逐步優化Bitmap載入。對於載入圖片較多較頻繁的功能,建議使用第三方的圖片載入框架,如Glide或者Picasso。

需要注意的是,此處doBlur有兩個重載,可根據需要設置圖片的縮放比例.這種方式和前文通過BitmapFactory.Options設置Bitmap取樣格式的效果是一致的,都是為了減小Bitmap載入的資源消耗,提高載入效率。

㈢ Android 圖片載入(一)高效載入Bitmap 基礎篇

由於Bitmap的特殊性以及Android對單個應用所規定的最大內存限制,我們在同時載入大量Bitmap時很容易發生內存溢出,即我們通常所說的OutOfMemoryError(OOM),因此高效載入Bitmap就成為了每個Android開發者的必備技能。

在學習如何高效地載入Bitmap之前,首先介紹一下如何載入一個Bitmap。我們都知道,Bitmap在Android中通常指的是一張圖片,那麼如何將JPG、PNG等格式的圖片轉換成Bitmap對象呢?BitmapFactory類給我們提供了一些方法:

接下來開始介紹如何高效地載入Bitmap,其實核心思想很簡單: 就是採用BitmapFactory.Options參數來調整圖片尺寸來適配控制項的大小。

假如我們顯示圖片的控制項ImageView寬高為100×100像素,而圖片的尺寸為1024×1024像素,這個時候如果將整個圖片載入進來並顯示到控制項上,自然是很佔用內存資源的。這個時候可以通過BitmapFactory.Options按一定的采樣率載入縮小後的圖片,再將縮小後的圖片顯示到ImageView中,這樣就能減小內存佔用從而在一定程度上避免OOM的發生。

通過BitmapFactory.Options來縮放圖片,主要是使用它的inSampleSize參數,也就是前面提到的采樣率。當采樣率inSampleSize為1時,采樣後的圖片大小為原圖大小;當采樣率inSampleSize>1,比如為2時,采樣後的圖片寬高都為原圖的1/2,即像素降為原圖的1/4,佔用的內存大小也就是原圖的1/4;比較特殊的是,當采樣率inSampleSize<1時,系統會自動將該值當做1來處理。 因此可以得出一個結論:采樣率inSampleSize必須是大於1的整數圖片才會有縮小的效果,並且采樣率同時作用於寬高,也就是說采樣後的圖片會縮小到原圖的1/(inSampleSize^2)。比如inSampleSize=4,那麼縮放比例為1/16。

我們現在知道了,通過采樣率可以提高圖片的載入效率,那麼如何才能計算出最合適的采樣率?我們可以按照如下流程:

接下來以decodeFile方法為例實現圖片的縮放,其他三個方法處理方式類似。

下一篇: Android 圖片載入(二)圖片載入框架Glide 入門篇

《Android開發藝術探索》

㈣ Android ImageView載入超長圖片解決方案

在平時開發過程中,我們偶爾會發現有些較長的圖片在Imageview內載入顯示白屏,也沒啥明顯的報錯,而且在不同性能的手機上有不同的效果。有的可以載入,有的不行。其實這個原因是由於GPU渲染限制導致的白屏問題。性能較差的手機上GPU的渲染限制較大,容易出現白屏的問題。針對這樣的問題有以下幾個解決方案,看個人的使用場景進行取捨

1、關閉硬體加速
在manifest文件裡面設置 hardwareAcceleration = 「false」可以關閉了硬體加速
這樣是可以載入長圖了,但是APP變卡了,體驗非常不好,看個人取捨。
這也是最簡單的方案

2、裁剪拼接顯示(分割顯示)
每次顯示在imageView中的圖不是原圖的bitmap,通過一個方法
Bitmap.createBitmap(bitmap,x,y,width,height)創建一個bitmap,長寬符合屏幕要求,這樣就不會超過像素限制。實際操作以後發現,的確可以顯示大圖,但是效果也不好,拖動的時候幀數比較低,比上一條的那種好點,但是沒有達到最好的要求(就是像快圖瀏覽裡面那樣的),即便手機自帶的相冊app也比這個流暢一些。

這個方案推薦一個比較好的庫:
https://github.com/davemorrissey/subsampling-scale-image-view
使用注意點:不要設置全局的matrix canvas.concat()
改寫後:

3、取GPU支持最大的高度將圖片進行縮放載入
由於是GPU載入限制導致的問題,我們可以找到GPU載入的閾值,然後通過閾值來計算出一個合理的尺寸
附幾個方法:

㈤ 在android開發中載入的圖片太大,有好幾十兆,應該怎麼辦

如果圖片太大會造成OOM內存溢出的錯誤,需要用Bitmap的壓縮機制。
解決方案:
1.使用BitmapFactory.decodeStream替代createBitmap方法
原因是該方法直讀取圖片位元組,調用JNI>>nativeDecodeAsset()來完成decode,無需再使用java層的createBitmap。

2.使用壓縮讀取技術
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile(imageSdUri, options);
final int height = options.outHeight;
final int width = options.outWidth;
options.inSampleSize = 1;
int w = 320;
int h = 480;
h = w*height/width;//計算出寬高等比率
int a = options.outWidth/ w;
int b = options.outHeight / h;
options.inSampleSize = Math.max(a, b);
options.inJustDecodeBounds = false;
Bitmap bitmap = BitmapFactory.decodeFile(imageSdUri, options);

3.及時釋放Bitamp
Bitmap對象在不使用時,我們應該先調用recycle()釋放內存,然後才它設置為null.雖然recycle()從源碼上看,調用它應該能立即釋放Bitmap的主要內存,但是測試結果顯示它並沒能立即釋放內存。但是我它應該還是能大大的加速Bitmap的主要內存的釋放。

㈥ android怎麼設置應用啟動時載入圖片

我覺得這主要是你測試手機的問題 還是你是用模擬器做的測試? 最好用手機測試 還有 這種問題解決只能是你不要把很多東西都寫到oncreate裡面 也不要布局的太復雜 android應用需要適配那麼多的機型 而且大多都是低配機 如果你的oncreate方法處理時間過長的話 肯定是會有這種現象的

㈦ Android軟體開發,對於地圖軟體,是怎麼載入圖片的呢

先說當前大家常用的地圖,比如網路,高德這些,他們是怎麼做的。
底層實現不是純java的,而是使用了類似opengl的技術,比如可能是osg這樣的開源圖像處理系統,也就是說是c/c++來做的底層,java的存在只是作為外部調用的介面。這也是為什麼在做網路高德的二次開發時,你除了使用對方的jar包外,還有一些so庫。至於他們使用的view已經不那麼重要了,反正要底層實現,用surfaceview就可以了。
這些地圖的矢量地圖是由矢量數據符號化以後繪制出來的,而不是由我們在pc端瀏覽的地圖那樣的瓦片來繪制的,這一點,你在接觸天地圖的apk以後,會有明顯的感覺。當然衛星地圖還是來自瓦片數據。三維地圖則是載入相應的三維數據了,因為opengl本來就是三維領域的王者。
然後說一下純java開發地圖應用的模式——我們以前就是用這個的。
這類地圖是使用瓦片的,一張張的圖片拼接起來的,所使用的控制項就是surfaceView或者GLSurfaceView,這一類的開源項目也有很多,比如decarta,所使用的方式就是用以LRU方式緩存圖片,然後繪制在surfaceView上。至於題主所擔心的OOM的問題,我只能說要看目標設備和代碼的優化情況了。

閱讀全文

與android預載入圖片相關的資料

熱點內容
蘋果平板如何開啟隱私單個app 瀏覽:704
空調壓縮機一開就停止 瀏覽:528
如何下載虎牙app 瀏覽:847
日語年號的演算法 瀏覽:955
dev裡面的編譯日誌咋調出來 瀏覽:298
php函數引用返回 瀏覽:816
文件夾和文件夾的創建 瀏覽:259
香港加密貨幣牌照 瀏覽:838
程序員鼓勵自己的代碼 瀏覽:393
計算機網路原理pdf 瀏覽:752
吃雞國際體驗服為什麼伺服器繁忙 瀏覽:94
php中sleep 瀏覽:490
vr怎麼看視頻演算法 瀏覽:86
手機app如何申報個人所得稅零申報 瀏覽:694
如何截獲手機app連接的ip 瀏覽:331
冰箱壓縮機是否需要電容 瀏覽:346
python列表每一行數據求和 瀏覽:275
自己有一台伺服器可以玩什麼 瀏覽:657
社會學波普諾pdf 瀏覽:584
解壓做食物的小視頻 瀏覽:759