編輯:Android開發實例
一、前言
前幾天發現09年Google IO大會關於移動應用方面的主題有一些不錯的PPT,對移動應用開發很有幫助。自己看了一些,邊看邊和大家分享。既然是PPT就很簡化了,我會根據實際情況寫一些Demo供大家參考。
Android在UI優化方面可以從以下五個方面入手:
二、Adapter優化
什麼是Adapter,可以先看看我的上一篇文章,Android開發——說說Adapter那點事 Adapter與View的連接主要依靠getView這個方法返回我們需要的自定義view。ListView是Android app中一個最最最常用的控件了,所以如何讓ListView流暢運行,獲取良好的用戶體驗是非常重要的。對ListView優化就是對Adapter中的getView方法進行優化。09年的Google IO大會給出的優化建議如下:
Adapter優化示例代碼:
1: @Override
2: public View getView(int position, View convertView, ViewGroup parent) {
3: Log.d("MyAdapter", "Position:" + position + "---"
4: + String.valueOf(System.currentTimeMillis()));
5: ViewHolder holder;
6: if (convertView == null) {
7: final LayoutInflater inflater = (LayoutInflater) mContext
8: .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
9: convertView = inflater.inflate(R.layout.list_item_icon_text, null);
10: holder = new ViewHolder();
11: holder.icon = (ImageView) convertView.findViewById(R.id.icon);
12: holder.text = (TextView) convertView.findViewById(R.id.text);
13: convertView.setTag(holder);
14: } else {
15: holder = (ViewHolder) convertView.getTag();
16: }
17: holder.icon.setImageResource(R.drawable.icon);
18: holder.text.setText(mData[position]);
19: return convertView;
20: }
21:
22: static class ViewHolder {
23: ImageView icon;
24:
25: TextView text;
26: }以上是Google io大會上給出的優化建議,經過嘗試ListView確實流暢了許多。
1: @Override
2: public View getView(int position, View convertView, ViewGroup parent) {
3: Log.d("MyAdapter", "Position:" + position + "---"
4: + String.valueOf(System.currentTimeMillis()));
5: final LayoutInflater inflater = (LayoutInflater) mContext
6: .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
7: View v = inflater.inflate(R.layout.list_item_icon_text, null);
8: ((ImageView) v.findViewById(R.id.icon)).setImageResource(R.drawable.icon);
9: ((TextView) v.findViewById(R.id.text)).setText(mData[position]);
10: return v;
11: }以上是不建議的做法!! 不過我們還是要懷疑一下,SO,我們還是來測試對比一下。 測試說明: 大家可以看到在getView的時候我們通過log打印出position和當前系統時間。我們通過初始化1000條數據到Adapter顯示到ListView,然後滾動到底部,計算出position=0和position=999時的時間間隔。 測試機子:HTC Magic 測試實錄:打開測序,讓ListView一直滾動底部。:-)
兩種情況在操作過程中體驗明顯不同,在優化的情況下流暢很多很多!
1、優化建議測試結果:
12-05 10:44:46.039: DEBUG/MyAdapter(13929): Position:0---1291517086043
12-05 10:44:46.069: DEBUG/MyAdapter(13929): Position:1---1291517086072
12-05 10:44:46.079: DEBUG/MyAdapter(13929): Position:2---1291517086085
……
12-05 10:45:04.109: DEBUG/MyAdapter(13929): Position:997---1291517104112
12-05 10:45:04.129: DEBUG/MyAdapter(13929): Position:998---1291517104135
12-05 10:45:04.149: DEBUG/MyAdapter(13929): Position:999---1291517104154
耗時:17967
2、沒優化的測試結果
12-05 10:51:42.569: DEBUG/MyAdapter(14131): Position:0---1291517502573
12-05 10:51:42.589: DEBUG/MyAdapter(14131): Position:1---1291517502590
12-05 10:51:42.609: DEBUG/MyAdapter(14131): Position:2---1291517502617
……
12-05 10:52:07.079: DEBUG/MyAdapter(14131): Position:998---1291517527082
12-05 10:52:07.099: DEBUG/MyAdapter(14131): Position:999---1291517527108
耗時:24535
在1000條記錄的情況下就有如此差距,一旦數據nW+,ListView的Item布局更加復雜的時候,優化的作用就更加突出了!
OK,歡迎大家交流學習,Gtalk:[email protected]
示例代碼: GoogleIO示例代碼
轉自:http://www.cnblogs.com/halzhang/archive/2010/12/05/1896791.html
Android提供了許多方法來控制播放的音頻/視頻文件和流。其中該方法是通過一類稱為MediaPlayer。Android是提供MediaPlayer類訪問內置的媒體播放
JSON代表JavaScript對象符號。它是一個獨立的數據交換格式,是XML的最佳替代品。本章介紹了如何解析JSON文件,並從中提取所需的信息。Android提供了四個
Android應用程序可以在許多不同地區的許多設備上運行。為了使應用程序更具交互性,應用程序應該處理以適合應用程序將要使用的語言環境方面的文字,數字,文件等。在本章中,我
Android應用程序可以在許多不同地區的許多設備上運行。為了使應用程序更具交互性,應用程序應該處理以適合應用程序將要使用的語言環境方面的文字,數字,文件等。在本章中,我