安卓系統(tǒng)的優(yōu)化建議_第1頁
安卓系統(tǒng)的優(yōu)化建議_第2頁
安卓系統(tǒng)的優(yōu)化建議_第3頁
安卓系統(tǒng)的優(yōu)化建議_第4頁
安卓系統(tǒng)的優(yōu)化建議_第5頁
已閱讀5頁,還剩12頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、對Android開發(fā)者有益的40條優(yōu)化建議下面是開始Android編程的好方法: 找一些與你想做事情類似的代碼 調整它,嘗試讓它做你像做的事情 經歷問題 使用StackOverflow解決問題對每個你像添加的特征重復上述過程。這種方法能夠激勵你,因為你在保持不斷迭代,不經意中你學到了很多。然而,當你發(fā)布應用時你還要做一些更深入的事情。從一些可正常工作的代碼到一個可怕的應用程序是一個巨大的跳躍,相比iOS平臺Android更是如此 。當在iOS上發(fā)布應用時只是在一個設備上跳躍你的手機對很多設備而言都很相似同樣大小的屏幕,都有很好的硬件,95%上運行相同版本的操作系統(tǒng)。在Android應用中你不會

2、遇到這種情況。你的程序必須能夠處理一切:從屏幕,處理器,定制的操作系統(tǒng),API層級以及任何其他的特定設備。這是我對使Android應用舒服起來的個人建議。目標屏幕尺寸及解決方法在Android世界里目前有超過100種的不同屏幕尺寸,但解決方法也很豐富。為使你的應用適應不同的屏幕配置有兩件事情你需要確定:你對不同的屏幕尺寸有一個好的布局和結構你的圖像在不同分辨率下工作良好這些都是獨立的任務,你可能有一個超級的tablet布局,但上面的圖形看起來很糟糕。我們會依次討論他們。為不同的屏幕而設計1.通常會用ScrollView 和 ListView 輕松搞定當我們有一系列不同尺寸的大屏手機時,它們之間

3、最大的不同就是屏幕的高度。因此ScrollView和ListView通??墒怯行У墓ぷ?,雖然有時它們并不能完全覆蓋全部屏幕。在OpenSignal中的Dashboard標簽下我們可以看到所有部件一氣呵成,不存在滑動、對于許多高級類型標簽中,滑動展示并不見得是一件壞事。如果你能夠為你所有的設計匹配到各種屏幕上面去,那么最好不過。否則,這兩個控件會讓你用最小的開發(fā)代價來保證你的軟件在大多數(shù)屏幕上正常展示。Dashboard style 的設計不需要scroll2: 使用文件夾. Android 的資源文件夾結構非常強大, 它允許開發(fā)者將不同的圖片、字符串、布局文件、外形、顏色這些資源,在api、代

4、碼、屏幕尺寸等部分. 下面是一個例子,展示了在資源文件夾下你可以怎樣做:在 values-small 文件夾中存放了一個 bools.xml 文件, 文件中有如下幾行代碼:123true在代碼中我可這樣引用:123if(getResources().getBoolean(R.bool.small_screen)getSupportActionBar().hide();在小尺寸設備中boolean值將置為true 我此時將因此ActionBar來節(jié)省空間. 這段代碼正是非凡的ActionBarSherlock 擴展庫中的一部分,稍后再詳細介紹. 在values-sw360dp文件夾中,存放對應屏

5、幕寬于360dp的資源文件。與上面相同的位置,有如下代碼123false對于大屏幕而言,ActionBar就置為了顯示狀態(tài).我不需要將 bools.xml 文件放入 values-sw400dp文件夾中, 因為操作系統(tǒng)會自動按相應路徑搜索. 例如一個設備寬 600dp (600/160=3.75 英寸, 這就是我們通常所說的7片裝) 操作系統(tǒng)會在values-sw600dp 和其包含的的文件夾中搜索 bools.xml 文件, 若沒有找到則搜索 values-sw400dp 文件夾,在搜索 values-sw360dp 文件夾以此類推.建議3:160dp = 1英寸。320 dp = 2英寸。

6、dp = dip建議4:你可以用這些目錄結構技巧來應付所有資源類型*,比如你的XML布局用指定的系統(tǒng)目錄名稱來解決這個問題,如:layout-sw360dp目錄可以匹配目標寬是360dp的機器。如果你也要支持橫豎屏布局切換的話,可以用如下目錄:layout-sw360dp-landlayout-sw360dp-port別急,你有一半的用戶是說阿拉伯語的?那就將布局名稱改為下面的樣子吧:layout-sw360dp-landlayout-sw360dp-portlayout-sw360dp-land-arlayout-sw360dp-port-ar前兩個可以適用于所有語言,-ar代表阿拉伯語。建

7、議5:資源規(guī)則簡介:XXX /例子:沒有添加目錄名:默認-適用于Nexus One,Droid 2,S2XXX-sw360dp / 比較大的手機 Galaxy Nexus, S3, S4XXX-sw600dp / 7 平板XXX-sw720dp / 10” 平板在Kindle設備有些不同,如下:XXX-large-mdpi / kindle fire 7XXX-large-hdpi / kindle fire 7 HD建議6:如果你不想裁剪所有的布局文件,你可以用dimens.xml文件*。你要是留心我上面的文章,你就會注意到在我的values目錄里有很多dimens.xml,這樣是因為我更喜

8、歡在一個layout.xml里設置值,在每一個布局文件里我喜歡這樣做: small_margin是在dimen.xml文件里定義的: 4dp這個4dp變量在所有dimen文件里。我有個Excel文件,里面創(chuàng)建了所有不同的基于不同因素所需的尺寸定義。也許你會問:為什么不讓android OS來處理所有尺寸的問題?為什么不呢,為什么不用一個values目錄和一個布局目錄來代替所有寫死的數(shù)值呢?那當然是可以的,如果設置得當,都會得到所有的尺寸,但是對于有些元素看起來就不是那么好計算尺寸了。建議7:讓空白空間大于圖像空間。讓圖像空間大于按鈕的大小。如果將按鈕,多選框,切換控件放大后是很丑陋的。一個10

9、0dip(0.63)大小的按鈕是不想在平板上顯示為原來兩倍寬度200dip(1.25)的.原因是屏幕變大了,這不是說平板是給巨人用的。我們可以這樣做,在按鈕增加的空間和圖片擴展的空間里添加空白。建議8:用GraphicalLayout工具快速預覽。GraphicalLayout是WYSIWG XML編輯器。我喜歡直接編寫元素-而不是拖,丟棄的可見編程方式,但在添加一些元素之后,可以在GraphicalLayout的下拉選擇菜單里選擇不同屏幕尺寸進行測試。這里有很多選項供你選擇。圖片縮放建議9:不要把所有的圖片都縮放了。用布局文件來適應不同屏幕尺寸的方法只是成功的一半,布局里的元素(如:圖片)也

10、要能在高分辨率的屏幕下良好工作。在概念上比較簡單的方式就是創(chuàng)建一套完整的圖片目錄并將它們與很多drawable目錄匹配起來。drawable-sw600dp-ldpidrawable-sw600dp-mdpidrawable-sw600dp-hdpidrawable-sw600dp-xhdpidrawable-sw600dp-xxhdpi.其它的類似。不要這樣做:你不要太盡信書了。一般來說有drawble-ldpi, drawable-hdpi等目錄就足夠了,不需要將所有的情況都加上。建議10:避免使用位圖(jpg,png)。對于一些圖標來說,用位圖是個不錯的選擇,因為它們使用簡單。但是如果可

11、以避免使用位圖,你可以節(jié)省很多空間。但用不同的方法也可以達到很好的結果。建議11:用XML繪圖。位圖都可以用XML繪圖來代替的。XML繪圖不是萬能的,但是它的方便性還是使我感到驚訝。Android開發(fā)文檔中有詳細的介紹,這里有個簡單的例子:617這里是定義了一個圓角矩形,一個有漸變的邊(深藍)。你可以在布局文件的任何地方來引用,而且它可以適應于任何屏幕。用它可以做出理想的按鈕。建議12:用更多的XML繪圖。再來介紹一個用XML繪圖制作出能更加讓你興奮的例子,下面的雷達背景看起來是不是更加的復雜:不用位圖對你的UI是沒有壞處的(除過圖標)。建議13:仍然用更多的XML繪圖(如果必須,就用位圖)。

12、那我們怎樣為天氣信號構建一個超酷的圖標-讓燈泡動態(tài)的依據(jù)光的強度來進行自動填充,以及怎么點擊指針后讓其旋轉呢?這里我們用位圖和XML結合起來做個例子:燈泡我們用PNG圖:icon_magnitude_min(一個空的燈泡)和icon_magnitude_max(充滿光的燈泡),然后我們動態(tài)的裁剪后者。為了實現(xiàn)這個目標我是這樣做的:1112在java程序中我將得到回形針的引用,然后可以用它來控制光的強度。建議14: 為什么要用9-patch (當你可以用XML drawables的時候)? Android具有使用9-patches 來定義drawables的選擇,有些教程闡述了怎樣用它們來做一個

13、按鈕,這樣可以在伸展的時候保持幾個角不變 (并且避免了像素處理)。如果你已經知道怎樣使用9-patches,可能是從web設計中學會的,那么它們或許值得一用。如果你對9-patches并不熟悉,我建議你維持原樣。如果你想適應什么東西例如拐角的圓弧或者顏色,創(chuàng)建9個小塊要比創(chuàng)建位圖更多被涉及,這就像回到了圖像編輯器的時代。許多用9-patches獲得的效果也可以通過XML獲得。建議15: 通過覆蓋onDraw()創(chuàng)建自定義views. 有些事情XML并不十分在行,我們在OpenSignal和WeatherSignal中畫過許多圖像,為此有許多的庫,但是我們要為自定義圖像自己編寫代碼。這很有趣?;?/p>

14、許你永遠也不需要做這個,但為了使圖像高度動態(tài)并自定義,這經常是唯一可行的辦法。建議16:在不能使用XML的地方使用SVG. 有時候覆蓋onDraw()并勤勤懇懇的為自定義view編寫代碼畫出需要的線條與弧線是過于技術化了。畢竟有一種矢量圖像語言,它稱作Scalable Vector Graphics(可擴展矢量圖形)。它也是史上最酷的Android應用之一Androidify的動力來源。事實上他們創(chuàng)建這個庫就是為了那款應用,他們將它發(fā)布在這里:SVG for Android 。這也就是我們在OpenSignal中畫儀表盤所用到的。建議17: 對SVG文件GZip壓縮將它們變得更小它們就會處理的

15、更快。建議18: SVG庫并不是支持一切.在一些特定的alpha通道中似乎不能正常工作,你甚至不得不在代碼中將它們剔除。達到在android所有版本里表示展現(xiàn)一致的目標建議19:在一些android系統(tǒng)里(如TouchWhizz/HTC Sense/MotoBlur等等),默認的buttons和其他UI組件會跟原生系統(tǒng)里的看起來差別很大。*我希望這不是真的,但事實卻是如此。建議20:自定義你的UI組件。為了確定你的app在所有的設備里看起來是一致的,你將需要自定義所有的東西。這其實沒有你想象中那么難,只要你做到了,你將能更加好地把握到你的app的展示外觀。建議21:Selectors是創(chuàng)建bu

16、ttons的利器。我們在上面提到了如何在XML里定義button的背景,但是你將如何創(chuàng)建一個當按下去會改變的button呢?很簡單:像下面那樣在xml文件里定義背景。該xml文件將接收到button當前狀態(tài)并且在外觀上做出相應的改變。建議22:在Honeycomb之前的版本里時不存在ActionBar跟很多 animation 樣式的,所以可以使用ActionBarSherlock 跟*NineOldAndroids來代替。Jake Wharton寫的Android開源 組件都是往下兼容的精心杰作。更為驚喜的是,ABS 擁有強大的功能用來定義ActionBar。把速度作為目標建議23:在運行慢

17、的手機上測試。你將在運行慢的手機上發(fā)現(xiàn)很多問題,同時它讓你抓狂,沒人會喜歡運行慢的程序。建議24:盡量減少XML布局層次。更多的層次意味著系統(tǒng)將為解析你的代碼付出更多的工作,這將會讓圖像渲染的更慢。建議25:用Android Lint。在工程目錄上右鍵選擇EclipseAndroid ToolsRun Lint。它將會得到程序的一些信息,并能提高程序的運行速度,或者它能讓你得代碼更加清爽。建議26:Android Lint可以得到錯誤信息。它可以給你的代碼提供很詳細的信息,并在你出錯之前就可以給做出提示。建議27:用可以幫助你減少視圖層次結構。這是一種簡單的方式來去除多余的層次。好的文章都對此

18、有所解釋,而且在 Android Developer中它也顯得與眾不同。建議28:用HierarchyViewer可以直觀的看到你布局的層次。這個智能的工具可以顯示布局中有多少層次,而且可以提示出那些可以讓程序變慢。建議29:如果可以盡量用RelativeLayout*。*AbsoluteLayout已經過期了,就不要用了。你經常會遇到在RelativeLayout和LinearLayout中做出選擇的情況,那就直接用RelativeLayouot吧,因為它可以讓你減少視圖層次。比如,你想實現(xiàn)一個如下視圖:盒子 A 在屏幕左半邊 |盒子 B在屏幕右半邊你首先會想到這么做:1. LinearLa

19、yout2. 3. android:layout_width=match_parent4. 5. android:layout_height=wrap_content6. 7. android:orientation=horizontal”That works just fine, but you could also use:1. RelativeLayout2. 3. android:layout_width=match_parent4. 5. android:layout_height=wrap_content6. 7. android:orientation=horizontal”8.

20、 9. View10. 11. android:id=+id/dummy_center”12. 13. android:layout_width=”0dip”14. 15. android:layout_height=”0dip”16. 17. android:layout_gravity=”center”/”第二個表單比第一個難看的多,事實上是相當?shù)脑愀猓何覀円呀浗榻B過一個完整的新元素了。但是假如我們要給每個盒子里加入一個圖片,一般的我們將這樣做:盒子 A 在屏幕左半邊 圖片|盒子 B在屏幕右半邊 圖片用第一中方法,你得創(chuàng)建一個有兩個層次的LinearLayout,如果用第二種方法,你可以直

21、接在同一個RelativeLayout中加入圖片,比如要指定第一個圖片必須在“dummy_center”的左邊,而且一個TextView A必須也在其左側。那么你就得用7個元素3個視圖層次了(LinearLayout 方式),而(RelativeLayout方式)只用6個元素2個層次,這樣所有的工作添加完成。建議30:用一些擴展工具如DDMS。這可以幫助你發(fā)現(xiàn)一些不必要的網絡調用、查看電池使用量、垃圾回收信息,狀態(tài)變化(例子:當回調onStop和onDestroy時)等。LittleEye是我目前比較喜歡的工具。建議31:用AsyncTasks。Anroid工程團隊受夠了人們經常在UI線程里面實現(xiàn)網絡調用(譯注:耗時操作,容易阻塞UI刷新),所以他們實現(xiàn)了一些可產生編譯級錯誤信息的API。但是仍然在很多app中的一些工作會拖垮UI線程,我們要考慮到UI布局要快以及提高UI的響應性。目標機器空間小建議32:一些Aandroid設備有100mb空間大小的限制。現(xiàn)在情況已有變化了,但是仍然有很多用戶還會擔心5Mb大小的app會浪費空間。如果你可以選擇將app裝入SD卡的話,這就不是問題了,但如果你

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論