偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

對(duì)Android開發(fā)者有益的40條優(yōu)化建議

移動(dòng)開發(fā) Android
下面是開始Android編程的好方法: 找一些與你想做事情類似的代碼 調(diào)整它,嘗試讓它做你像做的事情 經(jīng)歷問題 使用StackOverflow解決問題

下面是開始Android編程的好方法: 找一些與你想做事情類似的代碼 調(diào)整它,嘗試讓它做你像做的事情 經(jīng)歷問題 使用StackOverflow解決問題

對(duì)每個(gè)你像添加的特征重復(fù)上述過程。這種方法能夠激勵(lì)你,因?yàn)槟阍诒3植粩嗟?,不?jīng)意中你學(xué)到了很多。然而,當(dāng)你發(fā)布應(yīng)用時(shí)你還要做一些更深入的事情。

從一些可正常工作的代碼到一個(gè)可怕的應(yīng)用程序是一個(gè)巨大的跳躍,相比iOS平臺(tái)Android更是如此 。當(dāng)在iOS上發(fā)布應(yīng)用時(shí)只是在一個(gè)設(shè)備上跳躍–你的手機(jī)–對(duì)很多設(shè)備而言都很相似–同樣大小的屏幕,都有很好的硬件,95%上運(yùn)行相同版本的操作系統(tǒng)。在Android應(yīng)用中你不會(huì)遇到這種情況。

你的程序必須能夠處理一切:從屏幕,處理器,定制的操作系統(tǒng),API層級(jí)以及任何其他的特定設(shè)備。

這是我對(duì)使Android應(yīng)用舒服起來的個(gè)人建議。

目標(biāo)屏幕尺寸及解決方法

在Android世界里目前有超過100種的不同屏幕尺寸,但解決方法也很豐富。為使你的應(yīng)用適應(yīng)不同的屏幕配置有兩件事情你需要確定:你對(duì)不同的屏幕尺寸有一個(gè)好的布局和結(jié)構(gòu)你的圖像在不同分辨率下工作良好

這些都是獨(dú)立的任務(wù),你可能有一個(gè)超級(jí)的tablet布局,但上面的圖形看起來很糟糕。我們會(huì)依次討論他們。

為不同的屏幕而設(shè)計(jì)

1.通常會(huì)用ScrollView 和 ListView 輕松搞定

當(dāng)我們有一系列不同尺寸的大屏手機(jī)時(shí),它們之間最大的不同就是屏幕的高度。因此ScrollView和ListView通??墒怯行У墓ぷ?,雖然有時(shí)它們并不能完全覆蓋全部屏幕。在OpenSignal中的Dashboard標(biāo)簽下我們可以看到所有部件一氣呵成,不存在滑動(dòng)、對(duì)于許多高級(jí)類型標(biāo)簽中,滑動(dòng)展示并不見得是一件壞事。如果你能夠?yàn)槟闼械脑O(shè)計(jì)匹配到各種屏幕上面去,那么最好不過。否則,這兩個(gè)控件會(huì)讓你用最小的開發(fā)代價(jià)來保證你的軟件在大多數(shù)屏幕上正常展示。

Dashboard style 的設(shè)計(jì)不需要scroll

2: 使用文件夾. Android 的資源文件夾結(jié)構(gòu)非常強(qiáng)大, 它允許開發(fā)者將不同的圖片、字符串、布局文件、外形、顏色這些資源,在api、代碼、屏幕尺寸等部分. 下面是一個(gè)例子,展示了在資源文件夾下你可以怎樣做:

在 values-small 文件夾中存放了一個(gè) bools.xml 文件, 文件中有如下幾行代碼:123true

在代碼中我可這樣引用:123if(getResources().getBoolean(R.bool.small_screen)){getSupportActionBar().hide();}

在小尺寸設(shè)備中boolean值將置為true 我此時(shí)將因此ActionBar來節(jié)省空間. 這段代碼正是非凡的ActionBarSherlock 擴(kuò)展庫中的一部分,稍后再詳細(xì)介紹. 在values-sw360dp文件夾中,存放對(duì)應(yīng)屏幕寬于360dp的資源文件。與上面相同的位置,有如下代碼123false

對(duì)于大屏幕而言,ActionBar就置為了顯示狀態(tài).

我不需要將 bools.xml 文件放入 values-sw400dp文件夾中, 因?yàn)椴僮飨到y(tǒng)會(huì)自動(dòng)按相應(yīng)路徑搜索. 例如一個(gè)設(shè)備寬 600dp (600/160=3.75 英寸, 這就是我們通常所說的7片裝) 操作系統(tǒng)會(huì)在values-sw600dp 和其包含的的文件夾中搜索 bools.xml 文件, 若沒有找到則搜索 values-sw400dp 文件夾,在搜索 values-sw360dp 文件夾以此類推.

建議3:160dp = 1英寸。320 dp = 2英寸。dp = dip

建議4:你可以用這些目錄結(jié)構(gòu)技巧來應(yīng)付所有資源類型**,比如你的XML布局用指定的系統(tǒng)目錄名稱

來解決這個(gè)問題,如:layout-sw360dp目錄可以匹配目標(biāo)寬是360dp的機(jī)器。如果你也要支持橫豎屏布局切換的話,可以用如下目錄:

layout-sw360dp-land

layout-sw360dp-port

別急,你有一半的用戶是說阿拉伯語的?那就將布局名稱改為下面的樣子吧:

layout-sw360dp-land

layout-sw360dp-port

layout-sw360dp-land-ar

layout-sw360dp-port-ar

前兩個(gè)可以適用于所有語言,-ar代表阿拉伯語。

建議5:資源規(guī)則簡(jiǎn)介:

XXX //例子:沒有添加目錄名:默認(rèn)-適用于Nexus One,Droid 2,S2

XXX-sw360dp // 比較大的手機(jī) – Galaxy Nexus, S3, S4

XXX-sw600dp // 7〃 平板

XXX-sw720dp // 10” 平板

在Kindle設(shè)備有些不同,如下:

XXX-large-mdpi // kindle fire 7〃

XXX-large-hdpi // kindle fire 7〃 HD

建議6:如果你不想裁剪所有的布局文件,你可以用dimens.xml文件**。你要是留心我上面的文章,你就會(huì)注意到在我的values目錄里有很多dimens.xml,這樣是因?yàn)槲腋矚g在一個(gè)layout.xml里設(shè)置值,在每一個(gè)布局文件里我喜歡這樣做:12345678910111213 small_margin是在dimen.xml文件里定義的: 4dp

這個(gè)4dp變量在所有dimen文件里。我有個(gè)Excel文件,里面創(chuàng)建了所有不同的基于不同因素所需的尺寸定義。也許你會(huì)問:為什么不讓android OS來處理所有尺寸的問題?為什么不呢,為什么不用一個(gè)values目錄和一個(gè)布局目錄來代替所有寫死的數(shù)值呢?那當(dāng)然是可以的,如果設(shè)置得當(dāng),都會(huì)得到所有的尺寸,但是對(duì)于有些元素看起來就不是那么好計(jì)算尺寸了。

建議7:讓空白空間大于圖像空間。讓圖像空間大于按鈕的大小。如果將按鈕,多選框,切換控件放大后是很丑陋的。一個(gè)100dip(0.63")大小的按鈕是不想在平板上顯示為原來兩倍寬度200dip(1.25")的.原因是屏幕變大了,這不是說平板是給巨人用的。我們可以這樣做,在按鈕增加的空間和圖片擴(kuò)展的空間里添加空白。

建議8:用GraphicalLayout工具快速預(yù)覽。GraphicalLayout是WYSIWG XML編輯器。我喜歡直接編寫元素-而不是拖,丟棄的可見編程方式,但在添加一些元素之后,可以在GraphicalLayout的下拉選擇菜單里選擇不同屏幕尺寸進(jìn)行測(cè)試。

這里有很多選項(xiàng)供你選擇。

圖片縮放

建議9:不要把所有的圖片都縮放了。用布局文件來適應(yīng)不同屏幕尺寸的方法只是成功的一半,布局里的元素(如:圖片)也要能在高分辨率的屏幕下良好工作。在概念上比較簡(jiǎn)單的方式就是創(chuàng)建一套完整的圖片目錄并將它們與很多drawable目錄匹配起來。

drawable-sw600dp-ldpi

drawable-sw600dp-mdpi

drawable-sw600dp-hdpi

drawable-sw600dp-xhdpi

drawable-sw600dp-xxhdpi

...其它的類似。

不要這樣做:

你不要太盡信書了。

一般來說有drawble-ldpi, drawable-hdpi等目錄就足夠了,不需要將所有的情況都加上。

建議10:避免使用位圖(jpg,png)。對(duì)于一些圖標(biāo)來說,用位圖是個(gè)不錯(cuò)的選擇,因?yàn)樗鼈兪褂煤?jiǎn)單。但是如果可以避免使用位圖,你可以節(jié)省很多空間。但用不同的方法也可以達(dá)到很好的結(jié)果。

建議11:用XML繪圖。位圖都可以用XML繪圖來代替的。XML繪圖不是萬能的,但是它的方便性還是使我感到驚訝。Android開發(fā)文檔中有詳細(xì)的介紹,這里有個(gè)簡(jiǎn)單的例子:1234567891011121314151617

這里是定義了一個(gè)圓角矩形,一個(gè)有漸變的邊(深藍(lán))。你可以在布局文件的任何地方來引用,而且它可以適應(yīng)于任何屏幕。用它可以做出理想的按鈕。

建議12:用更多的XML繪圖。再來介紹一個(gè)用XML繪圖制作出能更加讓你興奮的例子,下面的雷達(dá)背景看起來是不是更加的復(fù)雜:

[[85713]]

不用位圖對(duì)你的UI是沒有壞處的(除過圖標(biāo))。

建議13:仍然用更多的XML繪圖(如果必須,就用位圖)。那我們?cè)鯓訛樘鞖庑盘?hào)構(gòu)建一個(gè)超酷的圖標(biāo)-讓燈泡動(dòng)態(tài)的依據(jù)光的強(qiáng)度來進(jìn)行自動(dòng)填充,以及怎么點(diǎn)擊指針后讓其旋轉(zhuǎn)呢?這里我們用位圖和XML結(jié)合起來做個(gè)例子:

燈泡我們用PNG圖:icon_magnitude_min(一個(gè)空的燈泡)和icon_magnitude_max(充滿光的燈泡),然后我們動(dòng)態(tài)的裁剪后者。為了實(shí)現(xiàn)這個(gè)目標(biāo)我是這樣做的:123456789101112

在java程序中我將得到回形針的引用,然后可以用它來控制光的強(qiáng)度。

建議14: 為什么要用9-patch (當(dāng)你可以用XML drawables的時(shí)候)? Android具有使用9-patches 來定義drawables的選擇,有些教程闡述了怎樣用它們來做一個(gè)按鈕,這樣可以在伸展的時(shí)候保持幾個(gè)角不變 (并且避免了像素處理)。如果你已經(jīng)知道怎樣使用9-patches,可能是從web設(shè)計(jì)中學(xué)會(huì)的,那么它們或許值得一用。如果你對(duì)9-patches并不熟悉,我建議你維持原樣。如果你想適應(yīng)什么東西——例如拐角的圓弧或者顏色,創(chuàng)建9個(gè)小塊要比創(chuàng)建位圖更多被涉及,這就像回到了圖像編輯器的時(shí)代。許多用9-patches獲得的效果也可以通過XML獲得。

建議15: 通過覆蓋onDraw()創(chuàng)建自定義views. 有些事情XML并不十分在行,我們?cè)贠penSignal和WeatherSignal中畫過許多圖像,為此有許多的庫,但是我們要為自定義圖像自己編寫代碼。這很有趣?;蛟S你永遠(yuǎn)也不需要做這個(gè),但為了使圖像高度動(dòng)態(tài)并自定義,這經(jīng)常是唯一可行的辦法。

建議16:在不能使用XML的地方使用SVG. 有時(shí)候覆蓋onDraw()并勤勤懇懇的為自定義view編寫代碼畫出需要的線條與弧線是過于技術(shù)化了。畢竟有一種矢量圖像語言,它稱作…Scalable Vector Graphics(可擴(kuò)展矢量圖形)。它也是史上最酷的Android應(yīng)用之一—Androidify的動(dòng)力來源。事實(shí)上他們創(chuàng)建這個(gè)庫就是為了那款應(yīng)用,他們將它發(fā)布在這里:SVG for Android 。這也就是我們?cè)贠penSignal中畫儀表盤所用到的。

建議17: 對(duì)SVG文件GZip壓縮將它們變得更小它們就會(huì)處理的更快。

建議18: SVG庫并不是支持一切.在一些特定的alpha通道中似乎不能正常工作,你甚至不得不在代碼中將它們剔除。

達(dá)到在android所有版本里表示展現(xiàn)一致的目標(biāo)

建議19:在一些android系統(tǒng)里(如TouchWhizz/HTC Sense/MotoBlur等等),默認(rèn)的buttons和其他UI組件會(huì)跟原生系統(tǒng)里的看起來差別很大。**我希望這不是真的,但事實(shí)卻是如此。

建議20:自定義你的UI組件。為了確定你的app在所有的設(shè)備里看起來是一致的,你將需要自定義所有的東西。這其實(shí)沒有你想象中那么難,只要你做到了,你將能更加好地把握到你的app的展示外觀。

建議21:Selectors是創(chuàng)建buttons的利器。我們?cè)谏厦嫣岬搅巳绾卧赬ML里定義button的背景,但是你將如何創(chuàng)建一個(gè)當(dāng)按下去會(huì)改變的button呢?很簡(jiǎn)單:像下面那樣在xml文件里定義背景。該xml文件將接收到button當(dāng)前狀態(tài)并且在外觀上做出相應(yīng)的改變。123456<?xml version="1.0" encoding="utf-8"?>

建議22:在Honeycomb之前的版本里時(shí)不存在ActionBar跟很多 animation 樣式的,所以可以使用ActionBarSherlock 跟**NineOldAndroids來代替。Jake Wharton寫的Android開源 組件都是往下兼容的精心杰作。更為驚喜的是,ABS 擁有強(qiáng)大的功能用來定義ActionBar。

把速度作為目標(biāo)

建議23:在運(yùn)行慢的手機(jī)上測(cè)試。你將在運(yùn)行慢的手機(jī)上發(fā)現(xiàn)很多問題,同時(shí)它讓你抓狂,沒人會(huì)喜歡運(yùn)行慢的程序。

建議24:盡量減少XML布局層次。更多的層次意味著系統(tǒng)將為解析你的代碼付出更多的工作,這將會(huì)讓圖像渲染的更慢。

建議25:用Android Lint。在工程目錄上右鍵選擇Eclipse>Android Tools>Run Lint。它將會(huì)得到程序的一些信息,并能提高程序的運(yùn)行速度,或者它能讓你得代碼更加清爽。

建議26:Android Lint可以得到錯(cuò)誤信息。它可以給你的代碼提供很詳細(xì)的信息,并在你出錯(cuò)之前就可以給做出提示。

建議27:用可以幫助你減少視圖層次結(jié)構(gòu)。這是一種簡(jiǎn)單的方式來去除多余的層次。好的文章都對(duì)此有所解釋,而且在 Android Developer中它也顯得與眾不同。

建議28:用HierarchyViewer可以直觀的看到你布局的層次。這個(gè)智能的工具可以顯示布局中有多少層次,而且可以提示出那些可以讓程序變慢。

建議29:如果可以盡量用RelativeLayout**。**AbsoluteLayout已經(jīng)過期了,就不要用了。你經(jīng)常會(huì)遇到在RelativeLayout和LinearLayout中做出選擇的情況,那就直接用RelativeLayouot吧,因?yàn)樗梢宰屇銣p少視圖層次。比如,你想實(shí)現(xiàn)一個(gè)如下視圖:

盒子 A 在屏幕左半邊 |盒子 B在屏幕右半邊

你首先會(huì)想到這么做:

  1. LinearLayout 
  2.  
  3. android:layout_width=match_parent 
  4.  
  5. android:layout_height=wrap_content 
  6.  
  7. android:orientation=horizontal 

”That works just fine, but you could also use:

  1. RelativeLayout 
  2.  
  3. android:layout_width=match_parent 
  4.  
  5. android:layout_height=wrap_content 
  6.  
  7. android:orientation=horizontal” 
  8.  
  9. View 
  10.  
  11. android:id=+id/dummy_center” 
  12.  
  13. android:layout_width=”0dip” 
  14.  
  15. android:layout_height=”0dip” 
  16.  
  17. android:layout_gravity=”center”/”@ 

第二個(gè)表單比第一個(gè)難看的多,事實(shí)上是相當(dāng)?shù)脑愀猓何覀円呀?jīng)介紹過一個(gè)完整的新元素了。但是假如我們要給每個(gè)盒子里加入一個(gè)圖片,一般的我們將這樣做:

盒子 A 在屏幕左半邊 圖片|盒子 B在屏幕右半邊 圖片

用第一中方法,你得創(chuàng)建一個(gè)有兩個(gè)層次的LinearLayout,如果用第二種方法,你可以直接在同一個(gè)RelativeLayout中加入圖片,比如要指定第一個(gè)圖片必須在“dummy_center”的左邊,而且一個(gè)TextView A必須也在其左側(cè)。那么你就得用7個(gè)元素3個(gè)視圖層次了(LinearLayout 方式),而(RelativeLayout方式)只用6個(gè)元素2個(gè)層次,這樣所有的工作添加完成。

建議30:用一些擴(kuò)展工具如DDMS。這可以幫助你發(fā)現(xiàn)一些不必要的網(wǎng)絡(luò)調(diào)用、查看電池使用量、垃圾回收信息,狀態(tài)變化(例子:當(dāng)回調(diào)onStop和onDestroy時(shí))等。LittleEye是我目前比較喜歡的工具。

建議31:用AsyncTasks。Anroid工程團(tuán)隊(duì)受夠了人們經(jīng)常在UI線程里面實(shí)現(xiàn)網(wǎng)絡(luò)調(diào)用(譯注:耗時(shí)操作,容易阻塞UI刷新),所以他們實(shí)現(xiàn)了一些可產(chǎn)生編譯級(jí)錯(cuò)誤信息的API。但是仍然在很多app中的一些工作會(huì)拖垮UI線程,我們要考慮到UI布局要快以及提高UI的響應(yīng)性。

目標(biāo)機(jī)器空間小

建議32:一些Aandroid設(shè)備有100mb空間大小的限制?,F(xiàn)在情況已有變化了,但是仍然有很多用戶還會(huì)擔(dān)心5Mb大小的app會(huì)浪費(fèi)空間。如果你可以選擇將app裝入SD卡的話,這就不是問題了,但如果你的app需要在onBoot里啟動(dòng)的話你就不能裝入SD卡了(例子:如一些窗體小部件).甚至對(duì)于一些新的設(shè)備,如果能很快的下載一個(gè)小的APK的話,用戶還是很高興的。

建議33:用XML資源(我發(fā)誓上次我已經(jīng)提醒過了),這將比PNG資源節(jié)省很多空間,當(dāng)你僅僅需要一個(gè)可以滿足很多屏幕大小的配置時(shí),一個(gè)XML文件會(huì)比能實(shí)現(xiàn)同樣功能的PNG省空間。

建議34:如果要用PNG,最好優(yōu)化一下(用PNGCrush或ImageOptim)

目標(biāo)bugs

建議35:在Android開發(fā)者控制臺(tái)里檢查所有被自動(dòng)檢測(cè)出來的bugs. 

建議36: ProGuard現(xiàn)在是默認(rèn)啟動(dòng)著的. Proguard太好用了 (提高你app的速度和降低文件大小),但這也讓StackTraces 非常難以處理。你將需要重新追蹤你的StackTraces,因此你將需要繼續(xù)保留在每次構(gòu)建中創(chuàng)建的Proguard的映射文件。我把它們都放到以代碼版本號(hào)命名的文件夾里。

建議37: 為了顯示StackTraces里的行數(shù),你需要修改ProGuard的配置。確認(rèn)你的proguard.cfg擁有下面這句話:

-keepattributes SourceFile,LineNumberTable

建議38:使用staged rollouts。測(cè)試5%的基礎(chǔ)用戶,并且觀察bug報(bào)告。

建議39:使用真實(shí)設(shè)備測(cè)試平臺(tái)。Device Anywhere and Perfecto Mobile提供了虛擬測(cè)試平臺(tái),在那里,你可以使用真正的移動(dòng)設(shè)備。我發(fā)現(xiàn)他們有一些笨拙,加入連續(xù)不斷地進(jìn)行測(cè)試的話,會(huì)導(dǎo)致有一些糟糕的情況。如果你在聯(lián)合辦公的環(huán)境里工作,或者有一些Android開發(fā)的好友,那么去啟動(dòng)一個(gè)“設(shè)備池”吧。

建議40: 多寫代碼少寫博客。其實(shí)不是的, 分享就是關(guān)愛, 我只是想不出第40條寫什么是了。

責(zé)任編輯:張葉青 來源: eoe Android開發(fā)者社區(qū)
相關(guān)推薦

2019-01-02 08:00:00

軟件工程師軟件開發(fā)

2011-04-28 09:41:46

Android MarAndroid

2012-04-02 22:49:58

Android

2011-12-05 22:44:53

Android

2011-07-19 09:51:32

性能優(yōu)化Designing FAndroid

2015-07-10 12:38:30

手游開發(fā)工作建議

2013-10-22 09:54:42

開發(fā)者應(yīng)用

2013-01-25 13:44:52

諾基亞series 40

2012-04-01 15:03:39

大型項(xiàng)目開發(fā)者

2011-11-14 10:27:22

FlashAndroidAdobe

2013-11-26 09:43:36

開發(fā)日志博客

2015-05-12 14:05:49

谷歌開發(fā)者

2017-04-18 21:27:01

AndroidAPP構(gòu)建速度

2012-06-13 01:23:30

開發(fā)者程序員

2011-08-09 11:13:07

iPhone游戲網(wǎng)絡(luò)連接測(cè)試游戲

2016-11-09 16:55:01

2012-09-19 10:25:56

iPhone 5游戲開發(fā)者

2013-06-07 10:07:28

開發(fā)者優(yōu)秀開發(fā)者

2010-02-26 08:56:13

Web開發(fā)者

2012-03-21 10:43:49

開發(fā)者AndroidIDC報(bào)告
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)