編輯:Android開發實例
前言
本章內容為開發者指南(Dev Guide)/Best Practices/Optimizing Apps for Android 3.0,譯為“為Android 3.0優化應用程序",版本為Android3.0 r1,翻譯來自"移動雲_文斌"。
原文
http://developer.android.com/guide/practices/optimizing-for-3.0.html
(原文已更新,下面鏈接可以看到本文原文2011-5-4:http://www.devdiv.com/android/docs/guide/practices/optimizing-for-3.0.html )
如果你正在開發Android應用程序,在Android 3.0中提供了為平板或類似設備增強用戶體驗的新特性。一般情況下,由於Android應用程序的向下兼容性,任何你已經發行的應用程序都能在Android 3.0設備上運行。然後,還是可以通過一些簡單的修改來為平板類型的設備進行優化。
本文描述的是你怎樣為Android 3.0優化現存的應用程序,並且能和老版本進行兼容,或者使用新的API完整的升級你的應用程序。
內容包括:
1. 安裝Android 3.0 SDK
2. 選擇優化或升級:
a) 平板電腦或類似設備優化應用
你已經有現存的應用,想為老版本的Android保持兼容性
b) 為平板電腦或類似設備升級或開發新的應用
你想使用Android 3.0的API升級你的應用,或者面向平板電腦或類似設備創建新的應用。
安裝Android 3.0SDK(Set Up Your SDK with Android 3.0)
要在Android 3.0上開始測試或開發你的應用程序,需要使用新的平台來配置現存的Android SDK:
(如果你還沒有Android SDK,現在就去下載吧)
1. 運行Android SDK和AVD管理器並安裝如下內容:
* Android 3.0 平台SDK
* Android SDK工具,版本10
* Android SDK 平台工作,版本3
* Android SDK文檔,API 11
* SDK API 11的示例代碼
2. 為平板類型設備創建AVD
設置target為“Android 3.0”,skin為“WXGA”(默認的skin)
關於模擬器性能(About emulator performance)
因為Android模擬器必須在你的計算機模擬ARM指令集,並且WXGA屏幕比典型的虛擬設備大很多,所以模擬器的性能遠比真實的設備低。
特別是在初始化模擬器時很慢,根據你的硬件情況,需要花較長時間。當模擬器啟動時,已經限制了用戶響應,所以請耐心等待直到Home界面(或解鎖界面)出現。
無論如何,你不需要每次重新生成你的應用程序的時候都重新啟動模擬器,通常情況下你只需要啟動一次並讓它保持運行即可。也可以參考下面的提示信息以在首次初始化後減少啟動次數。
我們正在努力的解決性能問題並在將來發布,目前,模擬器仍然是在沒有真實設備的情況下評估你的應用程序表現和功能的最好途徑。
提示:要減少模擬器的啟動次數,可以在你利用SDK和AVD管理器創建它時允許AVD快照(在AVD創建時有一個Enable snapshots的復選框)。然後,從AVD管理器啟動AVD並檢查Launch from snapshot和Save to snapshot,利用這種方式,當你關閉模擬器時,一個AVD狀態的快照就被保存起來,模擬器關閉時會變慢。當你已經擁有了一個初始化後的快照後你可以取消Save to snapshot(在首次關閉AVD之後)。
為平板電腦或類似設備優化應用
(Optimize Your Application for Tablets and Similar Devices)
如果你已經為早期的Android版本開發了應用,可以在不改變最低版本需求的情況下做幾個事情為Android 3.0的平板類型設備進行優化。(不需要修改你的manifest中的android:minSdkVersion)
注意:所有的Android應用程序都是前向兼容的,因此,如果你按標准使用了Android的API,你什麼也不用做,應用就可以在Android 3.0的設備上工作得很好。但是,為了向使用Android 3.0平板或類似設備管理的用戶提供更好的體驗,你應該更新你的程序來適應新的系統主題並為大屏幕提供優化。
這裡有幾件事情可以為運行Android 3.0的設備優化你的應用程序:
1. 在Android 3.0上測試你當前的應用
1. 生成你的應用程序並在Android 3.0 AVD(上文中創建的AVD)上安裝
2. 運行你通常的測試以確認所有功能看起來正常
2. 在你的應用中應用新的“holographic”主題
1. 打開你的manifest文件並修改<uses-sdk>標識,設置android:targetSdkVersion為”11”,例如:
<manifest ... >
<uses-sdk android:minSdkVersion="4"
android:targetSdkVersion="11" />
<application ... >
...
<application>
</manifest>
針對Android 3.0的目標平台,系統會自動為運行在Android 3.0設備上的每一個activity應用holographic主題,這個主題為控件提供了新的設計,例如按鈕和文本框,並且修改了其他的可視化元素。這個標准化主題是為Android 3.0制作的,所以你的應用程序將看起來會呈現這一樣式。
另外,這個主題能夠使用Action Bar,用於取代在activity頂部的傳統的標題欄,並且提供用戶訪問activity的選項菜單位。
2. 繼續使用android:minSdkVersion指定的最低版本編譯程序,但仍然安裝在Android 3.0 AVD上,反復測試並確保你的用戶接口在holographic主題下工作正常。
提示:如果你在activity中直接應用了其他主題,它將會取代holographic主題,解決的辦法是你可以使用system version qualifier來為基於holographic主題的android 3.0的設備提供選擇。更多信息可參考select a theme based on platform version。
3. 超大屏幕選擇布局
通過運行時為超大屏幕提供可選資源,你能不用采用新的API就讓你的應用提供在平板類型設備上的用戶體驗。
例如,這裡列出了為超大屏幕創建新布局時所要考慮的因素:
* 橫向布局:平板類型設備通常默認的方向是橫向的,因此你應該確保你的activity為寬視野做了優化。
你可以使用land資源,但是如果你想為超大的橫屏選擇資源的話,你應該同時使用xlarge和land。例如res/layout-xlarge-land/,這些限定名稱的是有順序要求的,詳見Providing Alternative Resources。
* 按鈕位置:考慮當兩只手持有平板設備時你UI中按鈕的位置是否易於操作。
* 字號大小:確保你的應用使用sp單位進行字號設置,這會單獨影響到可讀的體驗,很多情況下,你可能需要為xlarge配置大些的字號。
總之,確認你的應用符合Best Practices for Screen Independence。
為平板電腦或類似設備升級或開發新的應用
Upgrade or Develop a New App for Tablets and Similar Devices
如果你想開發全部運行在Android 3.0的平板類型設備上的應用程序,那就需要使用Android 3.0新的API,本節介紹可用的一些新特性。
聲明最低的系統版本
當你創建Android 3.0的項目時,首先要做的就是設置android:minSdkVersion為11,例如:
<manifest ... >
<uses-sdk android:minSdkVersion="11" />
<application ... >
...
<application>
</manifest>
針對Android 3.0平台,系統會自動為你的每一個activity應用新的主題。
另外,也會為每個activity使用Action Bar。
使用Action Bar
Action Bar是為每個activity提供的用於替換屏幕頂端傳統標題欄的控件,通常,在它的左側跟在Activity標題後邊包含應用程序圖標,在右側是選項菜單中的可用項。
在你的菜單資源中增加showAsAction=”ifRoom”,可以使得選項菜單就像“活動項目”一樣直接出現在Action Bar中。另外,也可以在其中加入像標簽一樣的導航功能,可以使用應用程序圖標導航到主activity,或者向上返回到activity歷史。
更多信息請參考Using the Action Bar。
使用fragment分離activity
在Activity中Fragment提供分離用戶行為和接口的表現方式。你可以在一個activity中合並多個fragment以生成多面板的UI,也可以在多個activity中重用fragment。可以認為一個fragment就像一個activity中的模塊,它提供了自己的生命周期,接收用戶的輸入事件,並且可以在activity運行時添加或移除。
例如,一個新聞應用程序可以使用一個fragment在左側顯示標題列表,使用另一個fragment在右側顯示文章內容——這些fragment出現在一個activity中,每個fragment都有自己的生命周期,單獨處理用戶的輸入。因此,用戶不是在一個activity中選擇標題然後在另一個activity中閱讀內容,而是可以在同一個activity內既選擇又閱讀。
更多信息參考Fragments文檔。
使用新的動畫API實現變換
全新的可伸縮的動畫框架允許你將動畫效果應用到任何對象的任意屬性上(View,Drawable,Fragment,Object等等),通常,你可以為對象的int,float和16進制的顏色值定義很多動畫因素(例如持續時間,重復次數,插入器等),當一個對象有屬性使用了這些類型,你還可以隨時改變這些值以影響動畫效果。
View類也提供了新的API用於支持新的動畫框架,使你可以很容易的在activity布局中使用2D和3D變換,並且為在布局文件中定義位置,方向,透明度等對象屬性提供了可能。
更多信息請參考Property Animation文檔。
啟用硬件加速
現在通過在配置文件的<application>或<activity>元素中設置android:hardwareAccelerated=”true”可以為你的應用程序使用OpenGL渲染器,硬件加速的好處就是使動畫、滾動更加平滑,提高了用戶接口的性能和響應速度。當啟用硬件加速時,請確認你的程序在支持硬件加速的設備上做過完整的測試。
增強的窗口小部件
窗口小部件允許用戶在Home界面直接從你的應用程序中獲取信息並且與運行中的服務(例如預覽郵件或控制音樂播放)交互。Android 3.0通過集合創建的ListView,GridView和新增的StackView的方式增強了窗口小部件的功能,這些小部件允許你進行更多的交互,例如使用滾動列表,可以通過RemoteViewsService自動的更新數據。
另外,可以使用小部件為應用程序創建預覽圖(在Android 3.0 AVD中已經內置)並通過android:previewImage進行引用,這樣用戶就可以看到之前加入到主屏幕中的應用程序預覽。
增加其他新特性
Android 3.0增加了很多有價值的新的API,例如拖放API,新的藍牙API,系統級的剪貼板框架,被稱為渲染腳本的新的圖像引擎等等,更多信息,請參見Android 3.0 Platform文檔。
為超大屏幕發布應用
你需要決定你的應用程序是只為平板類型的設備(典型的是超大(xlarge)設備)開發還是為所有種類的屏幕大小開發。
如果你想對所有屏幕尺寸有效(例如為所有手機和平板設備),那什麼也不用做,默認的,應用程序將android:minSdkVersion設為4或者更高,就會自動調整大小以適應屏幕尺寸。
如果你的應用僅為超大屏幕設計,可以在<supports-screens>中僅支持超大屏幕,而將其他的設成false,例如:
<manifest ... >
...
<supports-screens android:smallScreens="false"
android:normalScreens="false"
android:largeScreens="false"
android:xlargeScreens="true" />
<application ... >
...
<application>
</manifest>
使用這樣的聲明,就指定了你的應用只支持超大屏幕的設備,像Android Market這樣的外部服務會使用這一信息從不是超大屏幕的設備中過濾你的應用。
參考示例代碼
很多新的特性不僅在Android 3.0 Platform是進行了描述,而且為了幫助你理解用法還提供了示例代碼。獲取示例可以使用Android SDK管理器從SDK庫中下載(“Samples for SDK API 11”)。下載完後可以在<sdk_root>/samples/android-11/中找到,下面的列表可以幫你快速找到關心的特性:
* HoneyComb Grllery:演示了很多Android 3.0中新的API,包括fragment,Action Bar,拖放,動畫。
* Fragments:演示fragment布局,回退棧,狀態存儲等
* Action Bar:演示Action Bar特性,例如選項卡,圖標,活動項等。
* Clipboard:演示使用剪貼板進行復制粘貼操作。
* Drag and Drop:演示使用新的View事件進行拖放操作。
* Multi-choice List:演示如何為ListView和GridView提供多項選擇。
* Content Loaders:演示使用新的Loader API異步加載數據。
* Property Animation:使用很多例子應用新的動畫API。
* Search View Widget:演示在Action Bar上使用新的搜索控件。
* Renderscript:使用很多不同的應用來演示通過學習渲染腳本進行計算和3D圖像處理。
JSON代表JavaScript對象符號。它是一個獨立的數據交換格式,是XML的最佳替代品。本章介紹了如何解析JSON文件,並從中提取所需的信息。Android提供了四個
1、用於沒有一點提示的情況:依次打開eclipse上面的windows ——preferences ——java ——editor —— content assi
View Android所有的控件都是View或者View的子類,它其實表示的就是屏幕上的一塊矩形區域,用一個Rect來表示,left,top表示View相對於它
JSON代表JavaScript對象符號。它是一個獨立的數據交換格式,是XML的最佳替代品。本章介紹了如何解析JSON文件,並從中提取所需的信息。Android提供了四個