多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > 綜合技術 > Android官方開發文檔Training系列課程中文版:布局性能優化之ListView的優化

Android官方開發文檔Training系列課程中文版:布局性能優化之ListView的優化

來源:程序員人生   發布時間:2016-11-28 14:14:01 閱讀次數:2567次

原文地址:http://android.xsoftlab.net/training/improving-layouts/smooth-scrolling.html

想要讓ListView滑動流暢的關鍵所在是減輕主線程的負擔。要確保任何的磁盤訪問、網絡訪問、或SQL訪問都是在單獨的線程中履行的。如果要測試APP的狀態,可以開啟StrictMode。

使用后臺線程

使用工作線程可使UI線程將所有的注意力都集中在UI的繪制上。在很多情況下,使用AsyncTask所提供的功能就能夠在工作線程中處理耗時任務。AsyncTask會自動的將execute()發起的要求排隊,并順次履行。這意味著你不要自己創建線程池。

在下面的示例代碼中,AsyncTask被用來加載1張圖象,并在加載結束后自動的將其渲染到UI上。它還在圖象加載時展現了1個旋轉的進度條。

// Using an AsyncTask to load the slow images in a background thread new AsyncTask<ViewHolder, Void, Bitmap>() { private ViewHolder v; @Override protected Bitmap doInBackground(ViewHolder... params) { v = params[0]; return mFakeImageLoader.getImage(); } @Override protected void onPostExecute(Bitmap result) { super.onPostExecute(result); if (v.position == position) { // If this item hasn't been recycled already, hide the // progress and set and show the image v.progress.setVisibility(View.GONE); v.icon.setVisibility(View.VISIBLE); v.icon.setImageBitmap(result); } } }.execute(holder);

從Android 3.0開始,AsyncTask提供了1項新特性:可以將任務運行在多核處理器上。你可使用executeOnExecutor()方法發起履行要求,這樣多個要求就能夠同時進行,同時進行的任務數量取決于CPU的核心數量。

使用View Holder持有View對象

在滑動ListView時,代碼可能會頻繁的調用findViewById(),這會下降性能。就算是Adapter將已加載過的View返回,但是在復用時還是需要去查詢這些View來更新它們。杜絕重復使用findViewById()的方法就是使用”View Holder”設計模式。

ViewHolder對象將每一個View組件存儲于布局容器的tag屬性內,所以你可以快速訪問它們而不需要每次都去查詢。首先,你需要創建1個類來持有已加載的View:

static class ViewHolder { TextView text; TextView timestamp; ImageView icon; ProgressBar progress; int position; }

然后對ViewHolder的成員屬性賦值,然后將其寄存在布局容器內:

ViewHolder holder = new ViewHolder(); holder.icon = (ImageView) convertView.findViewById(R.id.listitem_image); holder.text = (TextView) convertView.findViewById(R.id.listitem_text); holder.timestamp = (TextView) convertView.findViewById(R.id.listitem_timestamp); holder.progress = (ProgressBar) convertView.findViewById(R.id.progress_spinner); convertView.setTag(holder);

那末現在就能夠很方便的對這些View組件進行訪問,而不再需要對它們單獨進行查詢,如此即可以節省出寶貴的CPU資源。

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 美国免费高清一级毛片 | 中文字幕最新中文字幕中文字幕 | 性xxxxⅹhd成人| 性欧美激情videos | 大学生一级一片第一次免费 | 欧美最爽乱淫视频播放黑人 | 最近中文字幕mv免费高清视频7 | 国内久久久久久久久久 | 日韩免费高清一级毛片在线 | 99久久精品国产高清一区二区 | 精品视频久久久久 | h网站免费在线观看 | 亚洲精品无码专区在线播放 | 吃奶添下面大尺度视频 | 五月婷婷丁香综合 | 日韩精品一区二区三区高清 | 久久久久国产精品免费免费不卡 | 亚洲欧美日韩国产一区二区精品 | 亚洲成人看片 | 国产精品秋霞午夜 | 在线观看亚洲免费视频 | 老牛影视在线一区二观看 | 欧美一级毛片图 | 久草香蕉视频 | 国产亚洲欧美在线播放网站 | 爱爱网站免费 | 精品一区二区三区高清免费观看 | 99久久精品男女性高爱 | 最近中文字幕免费mv视频8 | 看全色黄大色大片免费久久久 | 亚洲成人高清在线观看 | 最近免费中文在线视频 | 国产免费高清福利拍拍拍 | 国产精品久久久久久久久 | www.操你| 亚洲一区精品中文字幕 | 亚洲精品免费在线视频 | 亚洲国产女人aaa毛片在线 | 伊人不卡久久大香线蕉综合影院 | 中文字幕色视频 | 日韩国产另类 |