高性能編碼優化

轉載請註明出處:http://blog.csdn.net/guolin_blog/article/details/43376527

在前面幾篇文章當中,我們學習瞭如何通過合理管理內存,以及高性能編碼技巧的方式來提升應用程序的性能。然而實際上界面佈局也會對應用程序的性能產生比較大的影響,如果佈局寫得糟糕的話,那麼程序加載UI的速度就會非常慢,從而造成不好的用戶體驗。那麼本篇文章我們就來學習一下,如何通過優化佈局來提供應用程序的性能。還沒有看過前面前面一篇文章的朋友建議可以先去閱讀 Android最佳性能實踐(三)——高性能編碼優化

重用佈局文件

Android系統中已經提供了非常多好用的控件,這讓我們在編寫佈局的時候可以很輕鬆。但是有些時候我們可能需要反覆利用某個已經寫好的佈局,如果你總是使用複製粘貼的方式來進行佈局重用,這顯然是一種很笨的做法。而Android當然也已經充分考慮到了佈局重用的重要性,於是提供了和這兩個非常有用的標籤,下面我們就來逐個學習一下。

標籤可以允許在一個佈局當中引入另外一個佈局,那麼比如說我們程序的所有界面都有一個公共的部分,這個時候最好的做法就是將這個公共的部分提取到一個獨立的佈局文件當中,然後在每個界面的佈局文件當中來引用這個公共的佈局。

這裏舉個例子吧,我們應該都知道,目前幾乎所有的軟件都會有一個頭佈局,頭佈局中可以包含界面的標題、返回按鈕、以及其它一些操作功能等。那這樣的一個頭佈局,有些軟件是使用ActionBar來實現的,但是由於ActionBar的靈活性不太好,因而也有很多軟件會選擇自己去編寫實現。那如果自己去實現的話,由於這個頭佈局是在所有界面都要使用的,顯然我們不可能在每個界面當中都去寫一遍這個頭佈局的代碼,因此這種情況下使用標籤就非常合適了。這裏爲了給大家演示一下,我就編寫一個非常簡單的頭佈局,在res/layout文件夾中新建titlebar.xml作爲頭佈局,代碼如下所示:

[html]

view plain

copy

在CODE上查看代碼片

派生到我的代碼片

標籤是作爲標籤的一種輔助擴展來使用的,它的主要作用是爲了防止在引用佈局文件時產生多餘的佈局嵌套。大家都知道,android去解析和展示一個佈局是需要消耗時間的,佈局嵌套的越多,那麼解析起來就越耗時,性能也就越差,因此我們在編寫佈局文件時應該讓嵌套的層數越少越好。

在上面我們講解標籤的用法時主要介紹了它優點,但是它也存在着一個不好的地方,就是可能會導致產生多餘的佈局嵌套。這裏還是通過舉例的方式跟大家說明一下,比如說我們需要編寫一個確定取消按鈕的公共佈局,這樣任何一個界面需要確定和取消功能時就不用再單獨編寫了,新建ok_cancel_layout.xml,代碼如下所示:

[html]

view plain

copy

在CODE上查看代碼片

派生到我的代碼片

僅在需要時才加載佈局

有的時候我們會遇到這樣的場景,就是某個佈局當中的元素非常多,但並不是所有元素都一起顯示出來的,而是普通情況下只顯示部分常用的元素,而那些不常用的元素只有在用戶進行特定操作的情況下才會顯示出來。

這裏舉個大家都非常熟悉的例子,我們在添加聯繫人的時候其實可以編輯的字段真的非常多,姓名、電話、email、傳真、住址、暱稱等等等等,但其實基本上大家最常用的就是填一個姓名,填一個電話而已。那麼將這麼多繁雜的字段都一起顯示在界面上其實並不是一種很好的做法,因爲大多數人都是用不到這些字段的。比較聰明的做法就是把最常用的姓名和電話顯示在界面上,然後給用戶提供一個添加更多字段的選項,當用戶真的有需要去添加其它信息的時候,我們纔將另外的元素顯示到界面上。

說到實現這樣一個功能,我相信大多數人的第一反應就是將不常用的元素使用INVISIBLE或者GONE進行隱藏,然後當用戶需要使用這些元素的時候再把它們置成VISIBLE顯示出來。使用這種方式肯定可以實現功能的,但是性能方面就表現得一般了,因爲即使是將元素進行隱藏,它們其實還是在佈局當中的,每個元素還擁有着自己的寬、高、背景等等屬性,解析佈局的時候也會將這些隱藏的元素一一解析出來。

那麼我們如何才能讓這些不常用的元素僅在需要時纔去加載呢?Android爲此提供了一種非常輕量級的控件,ViewStub。ViewStub雖說也是View的一種,但是它沒有大小,沒有繪製功能,也不參與佈局,資源消耗非常低,將它放置在佈局當中基本可以認爲是完全不會影響性能的。

下面我們就來學習一下如何使用ViewStub來完成僅在需要時纔去加載佈局的功能,目前profile.xml中只有一個EditText用於編輯信息,那麼比如說我們還有另外三個不太常用的EditText,就可以將它們定義在另外一個佈局文件當中。新建profile_extra.xml文件,代碼如下所示:

[html]

view plain

copy

在CODE上查看代碼片

派生到我的代碼片

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章