-
Android異步加載總結查看全部
-
1212查看全部
-
將URL轉化為Bitmap查看全部
-
public Bitmap getBitmapFromUrl(String urlString){ Bitmap bitmap; InputStream is; try { URL url = new URL(urlString); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); is = new BufferedInputStream(connection.getInputStream()); bitmap = BitmapFactory.decodeStream(is); connection.disconnect(); return bitmap; } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally { is.close(); } return null; }查看全部
-
visbleitemcount 在初始化調用的時候,他的值為0,這時item還沒有加載,所以要講這個過程跳過,所以在判斷第一次加載的時候判斷,是否為第一次顯示,而且listview的item是否已經畫出查看全部
-
通過findviewbytag,通過tag在listview中尋找指定的imageview查看全部
-
ListView的加載對于流暢度的要求是很高的,當在異步加載的過程中,在更新UI的時候是在新的線程中進行的,并沒有阻塞主線程,但是在加載過之后更新UI線程,會導致UI線程發生一次重繪,如果重繪發生在滾動的時候就會卡頓 ******************************************************* ListView滑動停止后才加載可見項; listview滑動的時候,取消所有加載項查看全部
-
LruCache類中的sizeof方法用于獲得所存入數據的大小,重寫sizeof方法,指定所需的數據的大小,在每次存入緩存之內調用 ******************************************* 創建方法存入cache和取出Cache 通過與Bitmap相連的url返回所存取的BitMap查看全部
-
LRU近期最少使用算法,Android提供了LruCache類來實現這個緩存算法查看全部
-
ImageLoder中對應的方法查看全部
-
對ListView進行滑動監聽 滑動的時候停止加載所有的圖片,不滑動的時候加載可見的Item的圖片 在ImageLoder 新增對應的方法 加載可見項,停止加載查看全部
-
http://www.xianlaiwan.cn/api/teacher?type=4&num=30查看全部
-
異步加載的第一層:通過AsyncTask訪問網絡,獲取json或者XML字符串,然后解析他們產生若干object,將每個object放入到ListVIew中(adapter需要使用view holder pattern去寫),AsyncTask中的訪問網絡獲取json或者XML字符串,并且產生若干個object的工作就是在doInBackground()方法中進行的,所以這個方法總的來說就是用來準備數據源的。查看全部
-
From @xiaoc024 我來說一下為什么會閃。這是【同時】使用ConvertView和異步機制造成的。一個屏幕一次顯示8個item,當第9個item劃進屏幕時,ListView對adapter說,返給我一個view,我要顯示。adapter調用getView()方法,由于使用了緩存機制,getView()在初始化8個item以后所有返回的view(ConvertView)內存地址都是這8個中的。如果【不使用】異步機制加載圖片,那么返回的這個ConvertView是被更新以后返給ListView使用的。效果是上滑屏幕沒反應,等了半天,突然加載出來,但是不會閃。 然而這里使用了異步機制,也就是說先返回ConvertView,再等異步線程修改,這是閃的本質!由于教程里使每個異步線程人工阻塞了1s,那么上來有8個異步線程在運行(編號1-8),如果1s之內下滑了ListView比如說下滑了8個,那么新更新的8個item還是用的以前的內存,【并且】又開啟了8個異步線程(編號9-16)。因為預先設定了一個默認圖片,所以先顯示綠色的默認icon圖片。然后1-8號異步線程運行完畢,更新ImageView(閃),緊跟著9-16異步線程運行完畢,又更新imageView(閃),最終顯示正確結果。這就是下滑時先顯示默認圖片,再閃一下錯誤圖片,最后閃一下正確圖片的本質過程。 如果給每個ImageView設置了tag以后,當1-8號異步線程運行完畢后,會發消息給handler,讓他進行更新ui的操作,可是在1-8號線程發消息之前,9-16號線程已經更新了1-8和9-16共用的ImageView控件的tag,所以1-8號線程的消息雖然發給了handler,但是不滿足條件,handler不會進行ui更新。 p.s.完全理解這整個過程真的不容易,希望對你們有幫助。 至于說“然而如果不顯示ic_lanucher的話,圖片依然會錯誤跳動”其實這個時候圖片不是在跳動,而是正在做加載的工作,只是在加載工作完成之前,依然會顯示先前加載的圖片。 比如1-8加載完成了,我要查看第9個項目,系統就將第1個項目放入緩存,然后加載第9個,然而加載第1個需要時間,系統就會默認地使用最近加入緩存的對象,也就是第1個項目的圖片先抗一會,等待第1個項目加載完成接手。 這應該是convertView的小弊端查看全部
-
處理加載listview時的 使用了viewhold造成的圖片錯亂 用setTag來解決 講解了LruCache方法查看全部
舉報
0/150
提交
取消