亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

android圖片顯示(一) ———— 關于并發,亂序問題的處理

發布時間:2020-09-13 18:28:30 來源:網絡 閱讀:1089 作者:ysclyy 欄目:移動開發

 

GridView加適配器的方式

如果僅僅只用gridview加適配器的方法,因為加載圖片是需要時間的,如果你直接在getview中加載圖片的話,就會影響UI,照成滑動的時候卡頓。所以,每加載一個圖片的時候,我們會開啟一個額外的進程,這樣就不會影響UI主線程了。

 

僅僅只是開啟一個額外的線程會出現“亂序”的問題。也就是“并發性”的問題。

因為,當你進行滑動的時候,凡是經過的區域都會打開線程加載圖片,每個線程執行完畢的時間不是固定的。只有當線程執行完畢后,才會顯示在當前屏幕上。因此,當你大規模的滑動的時候,有些區域的圖片還沒顯示就被滑走,但是他們的線程還在,所有的線程都擠到當前屏幕顯示。所以被滑過的圖片會在相續的顯示,往往一個位置要顯示好幾張不同的圖片(因為線程加載的時差相互覆蓋),最后顯示為該屏幕本來的圖片。

 

這就是“并發性”的問題,并發性是指兩個或多個事件在同一時間間隔內發生。

這樣應該就能明白為什么會出現并發性問題,因為同時有多個線程再執行,我們不能保證圖片的線程在被滑過之后就停止執行了。

 

解決并發性問題,我最近嘗試的方式有兩種,一種Android doc上推薦的方法,還有一個就是看guolin大神的博客上的方法。

 

Android doc上推薦的方式

Android doc上推薦的方法,思路是將線程與每個位置(ImageView)綁定,在圖片沒有加載完之前先用一個站位圖片站著,若正在執行的線程不是當前圖片所綁定的線程就取消掉,不再加載。這樣就只有被綁定的線程才能執行,不會在一個位置上重復出現多張不同的圖片。

 

參考鏈接:

http://developer.android.com/training/displaying-bitmaps/process-bitmap.html

 

guolin大神的setTag方式

而guolin大神用了一個ImageView.setTag(imgeUri),為每個位置綁定一張圖片,其中p_w_picpathUri是每張圖片在本地的存儲路徑,既能保證不重復,也可以用它來加載圖片。

 

參考鏈接:http://blog.csdn.net/guolin_blog/article/details/9526203

 

 

所以我自己試著用了setTag()寫了一下,確實能解決問題。但是,圖片出現的速度比guolin大神的慢了許多,比Android doc也慢了許多。想了一下,原來是因為Android doc的方法是在判斷后有取消線程的執行。而我只是在線程執行之后,判斷該線程所加載的圖片是否與該位置綁定。沒綁定就不顯示。這樣所有線程不管有用沒有都執行了一遍,效率很低。而guolin大神的又不一樣,因為他重寫了OnScoll(),在滑動時,所有線程都取消,只有停下來的時候才開線程,所以,也不會有無用的線程在執行。我覺得這樣也很不錯!

 

 


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

石棉县| 嘉禾县| 高平市| 内乡县| 金乡县| 兖州市| 苗栗县| 开江县| 平陆县| 大新县| 鄂伦春自治旗| 五台县| 蓬溪县| 海兴县| 肥城市| 资阳市| 中西区| 乌恰县| 平谷区| 永和县| 浮山县| 阳城县| 河北区| 塔城市| 西丰县| 高淳县| 新安县| 瓦房店市| 盖州市| 皋兰县| 石屏县| 宁乡县| 陈巴尔虎旗| 罗城| 红原县| 二连浩特市| 双城市| 宁南县| 临江市| 龙里县| 西乡县|