国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android ListView常見的優化方式詳解

2019-12-12 03:35:59
字體:
來源:轉載
供稿:網友

ListView的優化

對于ListView來說,應該算是布局中幾種最常用的組件之一了,使用也十分方便,下面個大家介紹一下兩種常見的優化方式.

1.條目復用優化

  1. 其實listview的工作原理就是,listview在請求屏幕可見的item數時,convertView在getVIew中是null 的.
  2. 但是當屏幕向下滑動的時候(比如該屏幕尺寸可顯示7條teim),在item1被隱藏,此時出現item8時,covertView的值就不為null 了,因為item1去填充它.
  3. 而如果不做復用處理的話,item8 則會繼續去findviewById, 因此其實每個item里的View控件,竟然ID都是一樣的,那我們其實可以利用covertView的復用原理,來優化listview,從而避免OOM異常.

詳情見下圖:

總結: 通過對上圖的理解,那么我們得知listview的item是可以進行復用的,通過什么來復用?Android已經幫我們定義了一個方法getView(final int position, View convertView,ViewGroup parent) 里面的convertView 就是專門來處理復用的item的,因此我們只要對他處理就可以了.

2.優化findviewbyid

系統尋找子孩子id的方式: 從左向右,跟樹狀模式一樣.

每次尋找子孩子都消耗很多的資源,但是子孩子的id都是被創建出來的,

也就是是說他們是固定的,竟然如此那么我們就可以對他進行優化;

系統找R.id的模式見下圖:

總結: 通過對上圖的理解,那么我們得知findviewbyid(id) 的底層操作太耗時了,如果一個布局里面有一百多層,那么我就單單是找一個小小的'ImageView' 都會找半天.幸好在2009年的google IO大會上,google的工程師推出了一個優化的方式 通過自定義一個viewholder類,來對view的id進行綁定,從而減少系統查找這樣的耗時操作.

兩種優化方案實際代碼如下:

/** * @param position 位置    * @param convertview 復用view * 歷史回收的view對象. 當某個view對象被完全移除屏幕的時候  * 1. 盡量的復用converview(歷史緩存的view),減少view對象創建的個數  * 2. 盡量的減少子孩子id的查詢次數 . 定義一個viewholder */@Overridepublic View getView(final int position, View convertView,    ViewGroup parent) {  View view;  ViewHolder holder;  if (convertView != null) {    // 復用歷史view對象    view = convertView;    holder = (ViewHolder) view.getTag();  } else {    // 創建新的view對象    view = View.inflate(getApplicationContext(),        R.layout.item_callsmssafe, null);    // 每次尋找子孩子消耗很多的資源cpu 內存.    // 只有當子view對象第一次被創建的時候 查詢id    holder = new ViewHolder();    holder.tv_mode = (TextView) view        .findViewById(R.id.tv_black_mode);    holder.tv_phone = (TextView) view        .findViewById(R.id.tv_black_phone);    holder.iv_delete_blacknumber = (ImageView) view        .findViewById(R.id.iv_delete_blacknumber);    view.setTag(holder);}/** * 子孩子id的容器*/static class ViewHolder {  TextView tv_phone;  TextView tv_mode;  ImageView iv_delete_blacknumber;}

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 吉隆县| 胶州市| 育儿| 锦州市| 弋阳县| 高雄县| 沂南县| 凤庆县| 云浮市| 元阳县| 嵩明县| 商南县| 西安市| 长宁县| 揭阳市| 大冶市| 芦溪县| 吉水县| 武宣县| 西昌市| 平泉县| 涪陵区| 兴城市| 阆中市| 垣曲县| 康定县| 科技| 多伦县| 哈尔滨市| 彩票| 镇坪县| 宁河县| 乌审旗| 沙河市| 保山市| 新巴尔虎左旗| 神木县| 昌邑市| 全州县| 旬阳县| 城固县|