成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Android應用流暢(Seamlessness)設計

移動開發 Android
Android系統設計時,就把應用程序看作是一堆松散耦合的組件,而不是一堆黑盒代碼。作為開發者來說,允許我們把整個系統看作是更大的組件集合。這有益于我們可以與其它應用程序進行清晰無縫的集成,因此,作為回報,我們應該更好的設計我們的代碼。

即使你的應用程序是快速且響應靈敏的,但一些設計仍然會給用戶造成問題——與其它應用程序或對話框未事先計劃的交互,意外的數據丟失,意料之外的阻塞等 等。避免這些問題,有助于理解應用程序運行的上下文和系統的交互過程,而這些又正影響著你的應用程序。簡而言之,你應該竭盡全力去開發一個與系統和其它應 用程序流暢交互的應用程序。
一個常見的流暢問題是,一個應用程序的后臺處理——例如,一個Service或者BroadcastReceiver——彈出一個對話框來響應一些事件。 這可能看起來沒啥大礙,尤其是你在模擬器上單獨地構建和測試你的應用程序的時候。然而,當你的應用程序運行在真機上時,有可能你的應用程序在沒有獲得用戶 焦點時后臺處理顯示了一個對話框。因此,可能會出現在活躍的應用程序后方顯示了你的應用程序的對話框,或者從當前應用程序奪取焦點顯示了一個對話框,而不 管當前用戶正在做什么(例如,正在打電話)。那種行為,對應用程序或用戶來說,就不應該出現。
為了避免這些問題,你的應用程序應該使用合適的系統資源來通知用戶——Notification類。使用Notification,你的應用程序可以在狀態欄顯示一個icon來通知用戶已經發生的事情,而不是奪取焦點和打斷用戶。
另一個流暢問題的例子是未能正確實現Activity的onPause()和其它生命周期方法而造成意外丟失了狀態或用戶數據。又或者,如果你的應用程序 想暴露數據給其它應用程序使用,你應該通過ContentProvider來暴露,而不是(舉例)通過一個可讀的原始文件或數據庫來實現。
這些例子的共同點是它們都應該與系統和其它應用程序協作好。Android系統設計時,就把應用程序看作是一堆松散耦合的組件,而不是一堆黑盒代碼。作為開發者來說,允許我們把整個系統看作是更大的組件集合。這有益于我們可以與其它應用程序進行清晰無縫的集成,因此,作為回報,我們應該更好的設計我們的代碼。

這篇文章將討論常見的流暢問題以及如何避免它們。它將囊括這些主題:

1) 別丟棄數據

2) 不要暴露原始數據

3) 不要打斷用戶

4) 有太多事情要做?在線程里做

5) 不要讓一個Activity超負荷

6) 擴展系統主題

7) 設計你的UI可以應付多屏幕分辨率

8) 假設網絡很慢

9) 不要假定觸摸屏或鍵盤

10) 節省設備電池

1)別丟棄數據

一定要記住Android是一個移動平臺。可以顯而易見地說,其它Activity(例如,“Incoming Phone Call”應用程序)可能會在任何時候彈出來遮蓋你的Activity,記住這個事實很重要。因為這個過程將觸發 onSaveInstanceState()和onPause()方法,并可能導致你的應用程序被殺死。
如果用戶在你的應用程序中正在編輯數據時,其它Activity出現了,這時,你的應用程序被殺死時可能丟失那些數據。當然了,除非你事先保存了正在進行 的工作。“Android方式”是這樣做的:能接收和編輯用戶輸入的Android應用程序應該重寫onSaveInstanceState()方法,并 以恰當的方式保存它們的狀態。當用戶重新訪問應用程序時,她能得到她的數據。
進行這種處理方式最經典的例子是mail應用程序。如果用戶正在輸入email,這時其它Activity啟動了,mail應用程序應該把正在編輯的email以草稿的方式保存起來。

2)不要暴露原始數據

如果你不想穿著內衣在大街上溜達的話,你的數據也不應該這樣。盡管可能存在暴露應用程序的某種形式給其它應用程序,但這通常不是***的主意。暴露原始數據,要求其它應用程序能夠理解你的數據的格式;如果你變更了格式,那么,你將破壞那些沒有進行同步更新的應用程序。
“Android方式”是創建一個ContentProvider,以一種清晰的、深思熟慮的和可維護的API方式暴露你的數據給其它應用程序。使用 ContentProvider,就好像是插入Java接口來分離和組裝兩片高耦合的代碼。這意味著你可以修改數據的內部格式,而不用修改由 ContentProvider暴露的接口,這樣,也不會影響其它應用程序。

3)不要打斷用戶

如果用戶正在運行一個應用程序(例如,Phone程序),斷定對用戶操作的目的才是安全的。這也就是為什么必須避免創建Activity,而是直接在當前的Activity中響應用戶的輸入。

那就是說,不要在BroadcastReceiver或在后臺運行的Service中調用callActivity()。這么做會中斷當前運行的應 用程序,并導致用戶惱怒。也許更糟糕的是,你的Activity可能成為“按鍵強盜”,竊取了用戶要提供給前一個Activity的輸入。視乎你的應用程 序所做的事情,這可能是個壞消息。

不選擇在后臺直接創建Activity UI,取而代之的是,應該使用NotificationManager來設置Notification。它們會出現在狀態欄,并且用戶可以在他空閑的時候點擊它們,來查看你的應用程序向他顯示了什么。

(注意,如果你的Activity已經在前臺了,以上將不適用:這時,對于用戶的輸入,用戶期望的是看到下一個Activity來響應。)

4)有太多事情要做?在線程里做

如果你的應用程序需要執行一些昂貴或耗時的計算的話,你應該盡可能地將它挪到線程里。這將阻止向用戶顯示可怕的“Application Not Responding”對話框,如果不這樣做,最終的結果會導致你的應用程序完全終止。
一般情況下,Activity中的所有代碼,包括它的View,都運行在相同的線程里。在這個線程里,還需要處理UI事件。例如,當用戶按下一個按鍵,一 個key-down事件就會添加到Activity的主線程隊列里。事件處理系統需要很快讓這個事件出列并得到處理;如果沒有,系統數秒后會認為應用程序 已經掛起并為用戶提供殺死應用程序的機會。
如果有耗時的代碼,內聯在Activity上運行也就是運行在事件處理線程里,這在很大程度上阻塞了事件處理。這會延遲輸入處理,并導致ANR對話框。為了避免這個,把你的計算移到線程里。在響應靈敏性設計的文章里已經討論了如何做。

5)不要讓一個Activity超負荷

任何值得使用的應用程序都可能有幾個不同的屏幕。當設計UI屏幕時,請一定要使用多個Activity對象實例。
依賴于你的開發背景,你可能理解Activity類似于Java Applet,它是你應用程序的入口點。然而,那并不精確:Applet子類是一個Java Applet的單一入口點,而一個Activity應該看作是你的應用程序多個潛在入口點之一。你的“main”Activity和其它之間的唯一不同點 是“main”Activity正巧是在AndroidManifest.xml文件中唯一對“android.intent.action.MAIN” 動作感興趣的Activity。
因此,當設計你的應用程序的時候,把你的應用程序看作是Activity對象的集合。從長遠來看,這會使得你的代碼更加方便維護。

6)擴展系統主題

當談到UI觀感時,巧妙地交融非常重要。用戶在使用與自己期望相反的UI的應用程序時,會產生不愉快的感覺。當設計你的UI時,你應該盡量避免太多自己的 主題。相反的,使用同一個主題。你可以重寫或擴展你需要的主題部分,但至少在與其它應用程序相同的UI基礎上開始。詳細請參照“應用風格和主題”

7)設計你的UI可以應對多屏幕分辨率

不同的Android設備可能支持不同的屏幕分辨率。甚至一些可以自己變更分辨率,例如,切換到風景模式。確保你的布局和圖片能足夠靈活地在不同的設備屏幕上正常顯示。
幸運的是,這很容易做到。簡而言之,你需要做的是為主要分辨率提供不同版本的作品,然后為不同的尺寸設計你的布局。(例如,避免使用硬編碼位置而使用相對布局。)如果那樣做的話,系統會處理剩下的部分,而且你的應用程序在任何設備上都看起來很棒。

8)假設網絡很慢

Android設備會有多種網絡連接選項。所有的都提供數據訪問,但之間肯定有更快的。其中,速度最慢的是GPRS,GSM網絡的非3G數據服務。即使具備3G能力的設備在非3G的網絡上也會花費很多的時間,所以,網絡很慢仍然是一個長期存在的事實。
這就是為什么你應該按照最小化的網絡訪問和帶寬來編寫你的代碼。你不能假設網絡是快速的,所以,你應該總是計劃它是慢的。如果你的用戶碰巧在一個快速的網 絡上,那很好——他們的用戶體驗會提升。你要避免相反的情形:在不同的地點和不同時間,應用程序有時可用,有時慢得令人抓狂,這樣的程序可能不會受歡迎。
還有一個潛在的地方是,如果你正在使用模擬器,那么你很容易受它迷糊,因為模擬器使用電腦的網絡連接。這比手機網絡快很多,所以,你需要修改模擬器設定來 模擬較低的網絡速度。你可以在Eclipse中做到這點,在啟動選項的模擬器設置頁里設置或者在啟動模擬器時通過命令行選項設置。

9)不要假定觸摸屏或鍵盤

Android可以支持多種外觀形狀。也就是說,一些Android設備擁有全“QWERTY”鍵盤,而其它可能會有40鍵、12鍵或其它鍵盤設置。同樣的,一些設備可能有觸摸屏,但一些也會沒有。

當創建你的應用程序的時候,記住這一點。不要假定特定的鍵盤布局——除非你真的想限定你的應用程序只運行在某些設備上。

10)節省設備電池
如果移動設備經常插在墻上,那么,它也就不是很“移動”。移動設備是電池供電的,如果我們能讓每次充電的電池使用得更持久一些,那么每個人都會更加開心 ——尤其是用戶。其中兩大耗電硬件是處理器和無線;這也就是我們為什么要寫盡可能少做工作、盡可能少去使用網絡的應用程序的重要原因。
如何讓你的應用程序最小化的占用處理器,歸根結底還是要寫高效代碼。為了減少無線的電量消耗,確保對錯誤條件進行正確的處理,并只獲取你要的東西。例如, 如果某一個網絡操作失敗了,不要不斷地進行重試。如果失敗了一次,有可能是用戶不受歡迎,因此,如果你再以正確的方式操作,有可能還會失敗;所有你做的都 是在浪費電池。
用戶是相當聰明的:如果你的程序高耗電,他們是一定會發現的。到那個時點,你唯一可以確定的是,你的程序將很快被卸載掉。

原文作者: slu128

原文地址: http://my.eoe.cn/loody128/archive/1733.html

責任編輯:閆佳明 來源: my.eoe.cn
相關推薦

2021-07-04 07:41:10

Windows 11操作系統微軟

2011-12-20 10:42:22

Android應用界面設計

2021-05-19 06:48:08

Android 12Android系統谷歌

2021-02-02 16:06:32

Windows10操作系統微軟

2011-10-31 13:58:32

API

2023-10-06 14:27:10

Linux系統監控

2019-04-22 13:52:42

蘋果Android智能手機

2014-03-11 10:56:11

三星I679系統應用

2014-10-24 16:47:14

豌豆莢

2010-03-04 10:11:17

Android手機系統

2011-06-07 09:15:35

參數設置屏幕UI設計

2013-07-12 09:49:41

Android設計

2014-03-18 11:05:16

Android應用導航設計錯誤

2018-08-15 12:43:52

iOSAndroid設計差異

2012-02-23 09:21:42

亞馬遜云計算

2021-06-22 05:30:24

Windows11操作系統微軟

2022-04-06 14:25:19

視頻跨頁面技術

2018-10-16 15:08:20

屏幕圖像對象

2012-06-07 10:37:04

驗證組件FluentValid開發
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩欧美三级 | 国产精品久久久久久中文字 | 作爱视频免费看 | 亚洲天堂影院 | 色av一区二区 | 啪啪精品 | 日韩欧美国产精品 | 亚洲精品福利在线 | 一区二区三区在线电影 | 亚洲一级毛片 | 国产精品精品久久久 | 国产十日韩十欧美 | 综合久久国产 | 亚洲国产精品久久久 | 拍真实国产伦偷精品 | 在线视频亚洲 | a国产一区二区免费入口 | 黄片毛片免费观看 | 亚洲成人三区 | 在线一区| 久久99精品久久久久久 | 日本亚洲一区 | 午夜精品久久久久久久星辰影院 | 国产1区2区在线观看 | 日韩欧美在线免费观看 | 亚洲乱码国产乱码精品精的特点 | 亚洲精品aⅴ | 日韩免费激情视频 | 欧美日韩一区二区三区四区 | 不卡欧美| 欧美精选一区二区 | 欧美天堂 | 日韩激情在线 | 91九色porny首页最多播放 | 国产精品免费观看视频 | 91久久北条麻妃一区二区三区 | 人人叉 | 久久久www成人免费无遮挡大片 | 日韩不卡一区二区三区 | 亚洲国产精品一区二区久久 | 久草www |