中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

用戶體驗導向的Android應用開發(fā)

2019-06-04    來源:程序員官網(wǎng)

容器云強勢上線!快速搭建集群,上萬Linux鏡像隨意使用

文 / 陳彧堃

本文指出“流暢的環(huán)境”、“友好的體驗”和“節(jié)省電量”是保證Android應用擁有良好用戶體驗的三要素。

Android開發(fā)目前是移動開發(fā)中的“當紅炸子雞”,大量Java程序員涌向Android,同時會習慣性地將桌面和Web端的開發(fā)/設計經(jīng)驗帶到移動設備上。這樣的好處是充分利用了移動開發(fā)和桌面/Web服務的共性,比如廣泛使用的列表、本地數(shù)據(jù)庫等常用組件;壞處是移動和桌面/Web的使用場景和載體完全不同,直接移植桌面端開發(fā)的經(jīng)驗有害無益。

比如,手機主要在碎片時間使用,用戶容易對復雜的界面設計感到疲憊;同時,移動環(huán)境中上網(wǎng)慢,網(wǎng)絡連接頻率和失敗重發(fā)機制的設計更有講究;此外,手機電池續(xù)航能力差,后臺復雜的計算會加速耗電速度。這些開發(fā)理念直接影響用戶最終體驗,下面我們來討論一下在Android中如何以用戶體驗為導向進行開發(fā)優(yōu)化。

雖然不用深入了解底層,但需要對系統(tǒng)有基本的了解。Android系統(tǒng)分層清晰,最底層是Linux Kernel 2.6,之上包含了Webkit、SQLite、OpenGL ES等基礎C/C++庫,同時Dalvik虛擬機運行于Kernel之上,幫助應用進行底層內(nèi)存管理(這樣使Android應用無法直接進行內(nèi)存釋放)。這些庫一方面被系統(tǒng)大量使用,另一方面也通過Framework層提供接口給開發(fā)者。此外,F(xiàn)ramework層還提供其他系統(tǒng)級的服務,如消息通知服務、位置獲取服務、設備信息讀取服務等。

由此可見Android對于開發(fā)者非常開放和靈活,盡管如此,開發(fā)時仍然要注意不要過于隨意,以免產(chǎn)品過于復雜而讓用戶不知所措。當然,除了少數(shù)系統(tǒng)級應用開發(fā)需要深入了解Framework層實現(xiàn)機制之外,一般第三方應用開發(fā)者并不需要深入了解每一層原理,應把重點放在如何理解和靈活運用龐大的Android SDK API。

本文主要圍繞用戶的三種感覺來說明如何進行開發(fā)。

流暢的環(huán)境

讓用戶感覺使用非常流暢。遲緩會潛移默化地留下不好的印象。用戶看見App的圖標,便會在心中和“遲緩”、“卡”、“不穩(wěn)定”畫上等號,產(chǎn)生“打開畏懼癥”。

用戶滑動Listview、Gallery、Coverflow時覺得卡,多半是因為相應Adapter對getView的處理不夠好。每個Item都會和數(shù)據(jù)源綁定,而數(shù)據(jù)源的獲取方式有多種:網(wǎng)絡、本地文件、SQLite數(shù)據(jù)庫、SharedPreference以及內(nèi)存,它們的傳輸時間分別是7秒、2秒、1秒、100毫秒、5毫秒。

對于最耗時的網(wǎng)絡請求,很多人會采用異步操作,不會讓用戶耗費精力在網(wǎng)絡等待過程中。但在I/O以及SQLite查詢時,用戶的等待時間容易被忽略,從而降低滑動的流暢感。Android用戶常常遇到的ANR(Application Not Responding),便是這個問題的升級版。要知道,Activity Manager和Window Manager監(jiān)視著應用程序的響應,當發(fā)現(xiàn)按鍵或觸摸發(fā)生后5秒還沒執(zhí)行完處理邏輯,或是BroadcastReceiver處理時間超過了10秒,系統(tǒng)便會拋出ANR錯誤,并提醒用戶強制終止應用。

我的建議如下:

對于無法在短時間完成的操作,在獨立線程中處理,Android有多種異步處理模型可供使用,包括Thread-Handler、AsyncTask以及Loader and CursorLoader。

盡可能減少復雜計算和降低I/O,充分估計對象的使用頻率,選擇合適的數(shù)據(jù)源。個人認為大部分應用中不會存在太多太大的對象,可以考慮將數(shù)據(jù)緩存在內(nèi)存中。如果應用中有太多圖片不能一直緩存,可采用LRU(Least Recently Used ,最近最少使用)算法將不常用的緩存清理出內(nèi)存,這樣緩存大小可控,從而不會出現(xiàn)Out of Memory(內(nèi)存溢出)的Bug。

但要注意,算法是把雙刃劍,如果你享受到類似LRU帶來的提速后的爽快,就可能會挖空心思探索更高效的算法。這時要慎重,后面會講到看上去很牛的算法帶來的問題。

另外,網(wǎng)絡等待雖然是最耗時,但卻容易被忽略。因為粗看上去網(wǎng)絡是不可控的,與開發(fā)無關。一般會設置幾秒鐘的超時,超時則重發(fā)。事實上,在國內(nèi),中國移動的GRPS網(wǎng)絡占主導,所以手機上網(wǎng)普遍很慢,HTTP連接上下行10秒是很正常的,超時設置20秒都不為過。同時,根據(jù)友盟對Android應用使用的統(tǒng)計,用戶在每個App上的一次啟動花費時間是1分鐘左右,理論上有3次重發(fā)機會,但一次超時(假設是20秒)后,用戶就已經(jīng)失去信心,不會再等待一次了。所以在開發(fā)時,要結合具體使用場景,設計數(shù)據(jù)預取機制,盡量降低網(wǎng)絡請求次數(shù),同時考慮gzip、protobuf等數(shù)據(jù)壓縮和編碼機制,保證一次取到的數(shù)據(jù)不至于太大而造成額外延時。

標簽: 應用 

版權申明:本站文章部分自網(wǎng)絡,如有侵權,請聯(lián)系:west999com@outlook.com
特別注意:本站所有轉載文章言論不代表本站觀點!
本站所提供的圖片等素材,版權歸原作者所有,如需使用,請與原作者聯(lián)系。

上一篇:做平臺,還是做服務,產(chǎn)品人怎么選擇?

下一篇:挨踢項目求生法則-團隊建設篇