国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

Android:一個(gè)高效的UI才是一個(gè)拉風(fēng)的UI(二)

移動(dòng)開(kāi)發(fā) Android
前篇博客翻箱倒柜的介紹了優(yōu)化UI設(shè)計(jì)的兩個(gè)方法,第一個(gè)就是使用盡量少的組件來(lái)實(shí)現(xiàn)布局功能,第二個(gè)就是使用<meger>標(biāo)簽來(lái)減少不必要的根節(jié)點(diǎn),這兩個(gè)方法都可以提高應(yīng)用UI的運(yùn)行效率,但是夠了嗎?遠(yuǎn)遠(yuǎn)是不夠的,方法就像money一樣永遠(yuǎn)不嫌多,所以不再介紹多一些UI設(shè)計(jì)優(yōu)化的方法說(shuō)得過(guò)去么?

前篇博客翻箱倒柜的介紹了優(yōu)化UI設(shè)計(jì)的兩個(gè)方法,***個(gè)就是使用盡量少的組件來(lái)實(shí)現(xiàn)布局功能,第二個(gè)就是使用<meger>標(biāo)簽來(lái)減少不必要的根節(jié)點(diǎn),這兩個(gè)方法都可以提高應(yīng)用UI的運(yùn)行效率,但是夠了嗎?遠(yuǎn)遠(yuǎn)是不夠的,方法就像money一樣永遠(yuǎn)不嫌多,所以不再介紹多一些UI設(shè)計(jì)優(yōu)化的方法說(shuō)得過(guò)去么?

摸摸口袋里面的都快四歲、運(yùn)行著古老的android 2.2系統(tǒng)的屌絲機(jī)對(duì)于我來(lái)說(shuō),隨便一個(gè)大于10M的應(yīng)用都有完爆他幾條街死機(jī)崩潰的超能力。但是對(duì)于某信來(lái)說(shuō),如今已經(jīng)24M大小的它依然在屌絲機(jī)瀕臨垂死的硬件資源上運(yùn)行如飛(至少?zèng)]崩潰過(guò)),讓我不得不感嘆應(yīng)用優(yōu)化做的相當(dāng)不錯(cuò),也滿(mǎn)足我們這種屌絲在深深的寂寞夜晚來(lái)?yè)u一發(fā)的情感需求。所以來(lái)說(shuō),一個(gè)應(yīng)用能贏得市場(chǎng),不僅僅是贏得先機(jī),而更多的是因?yàn)橄嗤枨笏δ茏龅谋饶愫茫嗤δ芩饶愕暮?jiǎn)約,相同簡(jiǎn)約設(shè)計(jì)它運(yùn)行比你快!

排隊(duì),一個(gè)一個(gè)慢慢來(lái)

當(dāng)ActivityA跟ActivityB打招呼說(shuō):“偶要回家了,你來(lái)頂上”。說(shuō)明就馬上溜得無(wú)影無(wú)蹤,這時(shí)候急呀,ActivityB趕緊measure呀、layout呀、draw呀趕緊搞出一個(gè)界面來(lái)應(yīng)付觀眾先,忙的不亦樂(lè)乎;更要命這時(shí)候的是他們還要搞一個(gè)交接儀式——超炫超牛的切換動(dòng)畫(huà)!然而在日益無(wú)窮大的欲望與逐漸干癟的資源這強(qiáng)大的根本矛盾下,毫不猶豫的當(dāng)機(jī)了幾百毫秒。這一卡頓讓手機(jī)前的強(qiáng)迫癥患者來(lái)說(shuō)是多大的心理創(chuàng)傷,自然而然會(huì)說(shuō):“這軟件真渣!切個(gè)畫(huà)面都會(huì)總得頓一下才死心”。用戶(hù)體驗(yàn)瞬間降為0~

解決方案有哪些?當(dāng)然很簡(jiǎn)單的就是,取消牛逼哄哄的切換動(dòng)畫(huà)咯,但是如果你的產(chǎn)品經(jīng)理死活不同意那還不得另尋途徑。在不放棄動(dòng)畫(huà)的前提下,我們可以把某些measure呀、layout呀、draw呀的步驟延遲在動(dòng)畫(huà)后面執(zhí)行不就行咯,排隊(duì)一個(gè)一個(gè)來(lái),至于怎么操作呢?那我們要引入一個(gè)輕量級(jí)組件<ViewStub>,也就是動(dòng)態(tài)加載的方法。

我們通常使用它來(lái)做預(yù)加載處理,來(lái)改善頁(yè)面加載速度和提高流暢性,ViewStub本身不會(huì)占用層級(jí),它最終會(huì)被它指定的層級(jí)取代。有時(shí)候我們也需要復(fù)雜的視圖且少用,我們可以按需要的時(shí)候裝載以便減少內(nèi)存,提高體驗(yàn)。以前我們都是設(shè)置在布局中,然后使用View.GONE屬性來(lái)隱藏組件,但是耗資源影響性能。總得來(lái)說(shuō)這玩意就是一個(gè)輕量級(jí)的View,它一個(gè)看不見(jiàn)的,不占布局位置,占用資源非常小的控件。

下面上代碼:

要加載的ActivityB布局(復(fù)雜的動(dòng)畫(huà)代碼請(qǐng)忽略)

  1. <meger xmlns:android="http://schemas.android.com/apk/res/android" 
  2.     android:layout_width="match_parent" 
  3.     android:layout_height="match_parent" 
  4.     > 
  5.     <ViewStub   
  6.         android:id="@+id/mystub"   
  7.         android:layout_width="match_parent" 
  8.         android:layout_height="match_parent" 
  9.         /> 
  10.     <ImageView 
  11.         android:id="@+id/loading_image"   
  12.         android:layout_width="match_parent" 
  13.         android:layout_height="match_parent" 
  14.         android:src="@drawable/loading_image" 
  15.         /> 
  16. </meger> 

在這個(gè)UI界面中,當(dāng)我們切換ActivityB時(shí),因?yàn)榧骖櫟絼?dòng)畫(huà)效果。所以我們就讓ViewStub暫緩加載比較復(fù)雜的布局,而先把較為簡(jiǎn)單的顯示加載畫(huà)面loading_image加載出來(lái),當(dāng)稍后時(shí)間我們就在代碼里面開(kāi)始加載該布局,見(jiàn)代碼如下:

  1. @Override 
  2. protected void onCreate(Bundle savedInstanceState) {   
  3.   super.onCreate(savedInstanceState);   
  4.   setContentView(R.layout.layout_loading);   
  5.            
  6.   LoadHandler = new Handler();   
  7.   myStub = (ViewStub)findViewById(R.id.mystub);  
  8.   loadingView = (ImageView)findViewById(R.id.loading_image);   
  9.   myStub.setLayoutResource(R.layout.layout_main);//設(shè)置加載資源 
  10.   LoadHandler.postDelayed(new Runnable() {   
  11.     @Override   
  12.     public void run() {   
  13.       myStub.inflate();//開(kāi)始加載復(fù)雜界面 
  14.       loadingView.setVisibility(View.GONE);//隱藏臨時(shí)加載的簡(jiǎn)單界面 
  15.     }   
  16.   },500); 

上面代碼實(shí)現(xiàn)了先執(zhí)行復(fù)雜動(dòng)畫(huà),當(dāng)切換界面到到500ms時(shí),handler開(kāi)始執(zhí)行加載復(fù)雜的界面子線(xiàn)程,從而錯(cuò)開(kāi)了資源的集中利用,這里使用的是動(dòng)態(tài)添加ViewStub指向布局資源的方法,簡(jiǎn)單而實(shí)用吧,對(duì)于一個(gè)用戶(hù)來(lái)說(shuō),延遲半秒加載界面遠(yuǎn)遠(yuǎn)比切換畫(huà)面卡頓更容易接受。

使用ViewStub需要主要幾點(diǎn):

1、ViewStub只能被Inflate一次,當(dāng)Inflate之后ViewStub對(duì)象就被置為空值,說(shuō)得更通俗點(diǎn)就是當(dāng)ViewStub被某個(gè)布局Inflate后,就不能通過(guò)ViewStub來(lái)控制它,因?yàn)樗呀?jīng)功成身退了,自然對(duì)于需要不同場(chǎng)景下顯示隱藏的情況建議用visibility。

2、ViewStub只能用來(lái)Inflate一個(gè)布局文件,對(duì)于單個(gè)具體的View它是無(wú)能為力的,當(dāng)然如果把View搞在某個(gè)布局文件中也是可以接受的。

3、VIewStub中不能嵌套merge標(biāo)簽。

重用布局是一個(gè)好習(xí)慣

重用是一個(gè)好習(xí)慣,既然大家都常念叨,無(wú)圖無(wú)真相呀樓主,為了避免大家說(shuō)no picture you say a jb~這類(lèi)回復(fù),我還是勉勉強(qiáng)強(qiáng)上個(gè)圖吧。

這個(gè)界面由三個(gè)小部分組成,分別是標(biāo)題欄、內(nèi)容顯示和底端按鈕。如果你手指閑不住前前后后點(diǎn)一點(diǎn),按一按;會(huì)發(fā)覺(jué)各個(gè)界面的風(fēng)格驚人的相似!而且不僅僅是在這軟件上會(huì)體現(xiàn),而且市場(chǎng)上大部分應(yīng)用都是這樣!其實(shí)說(shuō)白了這就是一個(gè)風(fēng)格的問(wèn)題。

那么,既然這么多重復(fù)了,作為二十一世紀(jì)標(biāo)準(zhǔn)碼農(nóng)的我們來(lái)說(shuō),我們能忍受這種浪費(fèi)嗎?所以我們要用用<include>標(biāo)簽——模塊化布局。

布局如下:多簡(jiǎn)單的layout復(fù)用,你還會(huì)說(shuō)你不喜歡用<include>標(biāo)簽嗎?

  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  2.     android:layout_width="fill_parent" 
  3.     android:layout_height="fill_parent" 
  4.     android:orientation="vertical" 
  5.     > 
  6.  <include android:id="@+id/head_menu" layout="@layout/head_menu" /> 
  7.  <include android:id="@+id/content" layout="@layout/content_showweibo" /> 
  8.  <include android:id="@+id/bottom_menu" layout="@layout/bottom_menu" /> 
  9. </LinearLayout> 

使用<include>的好處有:

1、模塊化布局,提高重用率,易于日后的維護(hù)和擴(kuò)展。

2、降低生成的app的體重,用戶(hù)的流量是很貴的!

簡(jiǎn)單說(shuō)說(shuō)剩下的點(diǎn)

1、減少不必要的inflate

(1)對(duì)于inflate的布局可以直接緩存,用全部變量代替局部變量,避免下次需再次inflate

  1. if (loadingView != null) { 
  2.     loadingView.setVisibility(View.VISIBLE); 
  3. else
  4.     loadingView =LayoutInflater.from(context).inflate(R.layout.loadingView, thistrue); 

(2)BaseAdapter中item的convertView緩存用法,詳細(xì)請(qǐng)參考《關(guān)于BaseAdapter的使用及優(yōu)化心得》

PS:***次寫(xiě)的博文,寫(xiě)的渣得不能看。。。。。。

2、避免有太多的視圖

每個(gè)視圖都會(huì)消耗內(nèi)存,在一個(gè)布局中布置太多的視圖,布局會(huì)占用過(guò)多的內(nèi)存,假設(shè)一個(gè)布局包含超過(guò)80個(gè)視圖,layoutopt可能會(huì)給出下面這樣的建議:

  1. -1:-1 This layout has too many views: 83 views, it should have <= 80!  

上面給出的建議是視圖數(shù)量不能超過(guò)80,當(dāng)然***的設(shè)備有可能能夠支持這么多視圖,但如果真的出現(xiàn)性能不佳的情況,***采納這個(gè)建議。

3、千萬(wàn)別布局嵌套太多

布局不應(yīng)該有太多的嵌套,layoutopt(和Android團(tuán)隊(duì))建議布局保持在10級(jí)以?xún)?nèi),即使是***的平板電腦屏幕,布局也不應(yīng)該超過(guò)10級(jí),RelativeLayout可能是一個(gè)解決辦法,但它的用法更復(fù)雜,好在Eclipse中的Graphical Layout資源工具更新后,使得這一切變得更簡(jiǎn)單。

下面是布局嵌套太多時(shí),layoutopt的輸出內(nèi)容:

-1:-1 This layout has too many nested layouts: 12 levels, it should have <= 10!305:318 This LinearLayout layout or its RelativeLayout parent is possibly useless 

嵌套布局警告通常伴隨有一些無(wú)用布局的警告,有助于找出哪些布局可以移除,避免屏幕布局全部重新設(shè)計(jì)。

4、在某些場(chǎng)景下使用非主線(xiàn)程繪制的UI組件,具體組件名稱(chēng)我忘了,后面想起來(lái)補(bǔ)上哈。

本文鏈接:http://www.cnblogs.com/net168/p/4017921.html

責(zé)任編輯:chenqingxiang 來(lái)源: cnblogs
相關(guān)推薦

2014-10-14 15:50:19

UIAndroid

2020-04-17 10:58:12

UI設(shè)計(jì)師按鈕

2016-10-20 19:27:00

開(kāi)源項(xiàng)目bootstrapcss框架

2021-01-19 13:10:29

ZshLinuxUbuntu

2017-09-15 15:13:33

效果設(shè)備UI

2012-05-28 15:31:57

App-UI

2016-05-18 15:13:49

快碼CTO互聯(lián)網(wǎng)創(chuàng)業(yè)

2014-07-17 15:38:43

UI設(shè)計(jì)師移動(dòng)端

2016-09-26 17:26:20

2013-10-18 10:10:23

2024-02-07 08:52:07

VueUI 庫(kù)Vue.js

2024-11-29 12:51:18

2024-04-10 12:39:08

機(jī)器學(xué)習(xí)庫(kù)python

2013-03-04 16:45:49

2023-01-03 12:30:25

架構(gòu)CPUGPU

2013-03-26 13:02:58

UI設(shè)計(jì)易用用戶(hù)體驗(yàn)

2022-02-10 10:48:23

JavaScriptVue.js數(shù)據(jù)

2025-12-18 08:26:10

FlaUI.NET開(kāi)源

2022-04-28 09:05:41

網(wǎng)絡(luò)爬蟲(chóng)Python

2013-09-11 16:02:00

Spark分布式計(jì)算系統(tǒng)
點(diǎn)贊
收藏

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

免费一区二区三区在线视频| 六九午夜精品视频| 成人网在线播放| 国产精品一区二区av| 岳的好大精品一区二区三区| 免费av在线一区| 成人日韩av| 国产亚洲精品一区二555| sm在线播放| 亚洲激情久久久| 松下纱荣子在线观看| 亚洲精品福利免费在线观看| √新版天堂资源在线资源| 91黄色激情网站| 青青操视频在线| 欧美日韩三级一区二区| 秋霞a级毛片在线看| 制服.丝袜.亚洲.中文.综合| 国产高清一区二区三区视频| 亚洲第一福利在线观看| 麻豆成全视频免费观看在线看| 精品美女被调教视频大全网站| 激情网站在线| 亚洲激情中文字幕| 日韩毛片免费视频一级特黄| 久久综合久久八八| 欧美理伦片在线播放| 国产精品久久久久7777婷婷| 女人丝袜激情亚洲| 91精品国产综合久久久久久蜜臀 | 日韩福利在线观看| 久久中国妇女中文字幕| 日韩在线精品强乱中文字幕| 91av国产在线| 亚洲最新av| 蜜桃久久精品乱码一区二区| 日韩av不卡一区二区| 狠狠干视频网站| 久久久久久99久久久精品网站| 亚洲第一狼人区| 精品久久久精品| 成人在线免费看黄| 中国日韩欧美久久久久久久久| 久久久久久久久久久久电影| 日韩免费中文字幕| 国产亚洲激情| 精久久久久久久久久久| 91精品国产色综合久久不卡电影| 国产九色精品| av资源种子在线观看| 风间由美一区二区av101 | 国产精品不卡在线| 成人免费电影视频| 国产 日韩 欧美在线| 国产亚洲精品免费| 亚洲成人av高清| 亚洲精品wwwww| av综合网页| 含羞草久久爱69一区| 风间由美一区二区三区在线观看| 尤物国产在线观看| 欧美日韩五月天| 亚洲图片小说区| 91色在线视频| 成人永久免费视频| 欧美5-7sexvideos处| 欧美成人伊人久久综合网| 中文字幕亚洲在线观看| 国产精品对白一区二区三区| 成人视屏免费看| 在线观看高清av| 少妇高潮 亚洲精品| 午夜日韩视频| 久久精品国产精品亚洲色婷婷| 日韩欧美成人免费视频| 欧洲美女精品免费观看视频| av一区观看| 国产精品少妇自拍| 高端美女服务在线视频播放| 日本高清久久天堂| 极品少妇一区二区三区精品视频 | 久久免费少妇高潮久久精品99| 伊人久久成人| 91人人澡人人爽人人精品| 91精品国产综合久久福利软件| 卡通动漫精品一区二区三区| 女女同性女同一区二区三区按摩| 一本久道中文字幕精品亚洲嫩| 欧美在线一级| 亚洲欧美日韩另类精品一区二区三区 | 日本欧美在线视频免费观看| 欧美成人激情视频免费观看| 亚洲一区二区三区高清不卡| 99.玖玖.com| 黄色大片在线| 琪琪亚洲精品午夜在线| 国内精品免费在线观看| 中文av在线播放| 欧美—级高清免费播放| 免费高清不卡av| 亚洲做受高潮| 欧美不卡视频一区发布| 蜜桃视频一区二区三区在线观看| 无圣光视频在线观看| 久久久免费观看| 国产盗摄视频一区二区三区| av在线电影播放| 国产专区欧美专区| 国产精品超碰97尤物18| 四虎地址8848精品| 黄色一级大片免费| 欧美tk丨vk视频| 国产日韩亚洲欧美精品| 国产一二三区在线| 91久久在线视频| 一区av在线播放| 国产毛片久久久| 女人扒开屁股爽桶30分钟| 亚洲一区二区黄| 国产真实乱子伦精品视频| 欧美理论片在线播放| 欧美影视一区二区| 欧美久久久影院| 国产综合精品| 久久久久国产精品嫩草影院| 成人激情视频网| 午夜私人影院久久久久| 免费看成人吃奶视频在线| 成人免费淫片免费观看| 91av视频导航| 亚洲天堂久久久久久久| 日韩精品一区国产| 日韩免费毛片视频| 理论片在线不卡免费观看| 波多野结衣在线aⅴ中文字幕不卡| 精品123区| 欧美s码亚洲码精品m码| 欧美精品在线视频观看| 不卡视频免费播放| 成人黄色av网址| 成年免费网站| 国产精品视频专区| 激情懂色av一区av二区av| 欧美日韩1区| 久久av色综合| 激情六月天婷婷| 久久久成人av| 国产精品拍天天在线| 国产在线日韩精品| 免费动漫网站在线观看| 明星裸体视频一区二区| 亚洲精品视频播放| 成人黄色大片在线观看| 亚洲天堂av资源在线观看| 国产毛片视频| aaa级精品久久久国产片| 欧美一区二区播放| 成人免费视频caoporn| 精品五月天堂| av网站无病毒在线| 污污污污污污www网站免费| 欧美黑人视频一区| 亚洲午夜精品在线| 久久精品91| 亚洲一区二区小说| 国产真实伦在线观看| 91丨九色丨国产| 精品国产a毛片| 久久久91精品国产一区二区三区| 久久福利影院| 成av人片在线观看www| 日韩亚洲在线视频| 亚洲一区二区少妇| 亚洲精品永久免费| 一区二区三区四区不卡视频| 天堂va蜜桃一区二区三区漫画版 | 国产av熟女一区二区三区| 久久免费少妇高潮久久精品99| 丁香五六月婷婷久久激情| 麻豆精品久久久| 青青草这里只有精品| 免费在线午夜视频| 久久久噜噜噜www成人网| 亚洲精品免费一区二区三区| 亚洲欧美制服另类日韩| 夜夜精品视频一区二区| 精品一区二区三区不卡| 要久久爱电视剧全集完整观看| 免费av在线播放| 日本免费不卡一区二区| 91精品久久久久| 亚洲精品一区二三区不卡| 一区二区三区在线免费| 日本v片在线高清不卡在线观看| 国产精品毛片av| 黄网av在线| 性感av在线播放| 国产又黄又大又粗视频| 国产三区精品| 91黄色8090|