Android App 應(yīng)該考慮到的方面(轉(zhuǎn))

做一個(gè)優(yōu)秀的Android App 應(yīng)該考慮到的方面

原文地址:http://www.codeceo.com/article/re-design-android-app.html

開(kāi)發(fā)工具的選擇

開(kāi)發(fā)工具我將選用 Android?Studio,它是Google官方指定的Android開(kāi)發(fā)工具铛只,目前是1.2.2穩(wěn)定版蛙奖,1.3的預(yù)覽版也已經(jīng)發(fā)布了会放。 Android?Studio的優(yōu)點(diǎn)就不需多說(shuō)了森书,GitHub上大部分的Android開(kāi)源庫(kù)也都已遷移到Android?Studio上來(lái),在未提供 jar文件時(shí)夸盟,使用Android?Studio可以極為方便地集成開(kāi)源庫(kù)灌闺。最為重要的是Google已宣布將在年底前停止對(duì) Eclipse?Android開(kāi)發(fā)工具的一切支持(Google Ends Support for Android Eclipse Tools),因此請(qǐng)?jiān)缛辙D(zhuǎn)移到Android?Studio上來(lái)堕义。

App設(shè)計(jì)風(fēng)格

這一點(diǎn)對(duì)于一個(gè)開(kāi)發(fā)者來(lái)說(shuō)猜旬,貌似沒(méi)有決定權(quán)脆栋,最終的決定權(quán)在產(chǎn)品部門(mén)手里。盡管這樣洒擦,我還是會(huì)盡力說(shuō)服產(chǎn)品部門(mén)將App設(shè)計(jì)成Material?Design風(fēng)格椿争。這一點(diǎn)說(shuō)多了都是淚啊,作為一個(gè)Android開(kāi)發(fā)者熟嫩,卻整天開(kāi)發(fā)著iOS風(fēng)格的App秦踪,相信很多公司都這樣,為了節(jié)省成本和時(shí)間掸茅,Android和iOS共用一套UI椅邓。舉一個(gè)最常見(jiàn)的例子,Android?App中每個(gè)頁(yè)面TitleBar的左上角放一個(gè)返回按鈕昧狮,這在iOS里是必須的景馁,但Android有返回鍵啊,這樣設(shè)計(jì)對(duì)于 Android完全是多此一舉逗鸣。真心希望產(chǎn)品設(shè)計(jì)者尊重每種操作系統(tǒng)的風(fēng)格及使用習(xí)慣合住,不要再設(shè)計(jì)不倫不類的產(chǎn)品。Material?Design正好提供了一種這樣的規(guī)范撒璧,自MD規(guī)范發(fā)布以來(lái)透葛,其優(yōu)雅的設(shè)計(jì)和清新的風(fēng)格已吸引了大批設(shè)計(jì)者和開(kāi)發(fā)者,如今MD設(shè)計(jì)不止在Android上(已有官方類庫(kù)支持 MD風(fēng)格)沪悲,甚至在CSS获洲、HTML、JavaScript網(wǎng)頁(yè)設(shè)計(jì)上都越來(lái)越火殿如。因此贡珊,對(duì)于App的設(shè)計(jì)風(fēng)格,Material?Design當(dāng)仁不讓涉馁,也許你曾經(jīng)錯(cuò)過(guò)了Android?Design门岔,請(qǐng)不要再錯(cuò)過(guò)Material Design。

一些相關(guān)的鏈接:

Material Design官網(wǎng)

Material Design配色模板

MD一個(gè)設(shè)計(jì)案例網(wǎng)站

MD風(fēng)格的Andorid抽屜源碼:Android-MaterialDesign-NavigationDrawer

MD風(fēng)格的一個(gè)App源碼(有妹子哦):Android-MaterialDesign-DBMZ

版本支持

對(duì)于Android要支持的最低版本烤送,可以參考各個(gè)版本的市場(chǎng)占有率寒随,其實(shí)最靠譜的是根據(jù)自家App的統(tǒng)計(jì)數(shù)據(jù)來(lái)決定,目前我們的App最低支持2.2帮坚。以個(gè)人觀點(diǎn)認(rèn)為妻往,雖然2.x的版本仍然有一部分用戶,但其實(shí)手機(jī)更新?lián)Q代特別快试和,為了更好的用戶體驗(yàn)讯泣,也為了應(yīng)用更新的API(很多第三方庫(kù)也都有版本要求),應(yīng)該提高最低支持的版本阅悍,大概3.0 為宜好渠,即API Level為11昨稼。

App框架設(shè)計(jì)

相信大家都有體會(huì),隨著功能模塊的增加拳锚,App越來(lái)越大假栓,如果沒(méi)有良好的架構(gòu)設(shè)計(jì),則代碼將會(huì)變得臃腫且不易維護(hù)霍掺,各功能模塊的耦合度會(huì)越來(lái)越高匾荆。因此可以把App模塊化,將一個(gè)完整的App劃分成幾個(gè)相對(duì)獨(dú)立的模塊抗楔,這樣即可以降低模塊間的耦合也利于復(fù)用棋凳。

1.網(wǎng)絡(luò)模塊

已經(jīng)很少有單機(jī)版的App了吧,大部分都需要聯(lián)網(wǎng)连躏,從服務(wù)器請(qǐng)求數(shù)據(jù)剩岳,因此網(wǎng)絡(luò)模模塊必不可少。GitHub上的開(kāi)源網(wǎng)絡(luò)框架也特別多入热,個(gè)人認(rèn)為可以使用開(kāi)源框架拍棕,目前我會(huì)選okHttp或者Volley,也許以后會(huì)有更好的網(wǎng)絡(luò)框架出現(xiàn)勺良。注意如果使用開(kāi)源框架绰播,則必須要閱讀其源碼,必須能夠駕馭它尚困,這樣就不至于當(dāng)bug出現(xiàn)時(shí)束手無(wú)策蠢箩。當(dāng)然還可以自己寫(xiě)網(wǎng)絡(luò)模塊,目前我們的App網(wǎng)絡(luò)模塊就完全是自己寫(xiě)的事甜,這樣的好處是自己熟悉所寫(xiě)的代碼谬泌,當(dāng)有bug時(shí)可以迅速定位問(wèn)題,同時(shí)注意處理一些聯(lián)網(wǎng)過(guò)程中的細(xì)節(jié)逻谦,如:

(1)對(duì)HTTPS的支持掌实、HTTPS證書(shū)的驗(yàn)證(目前很多做法都是默認(rèn)允許所有HTTPS證書(shū)的,其實(shí)這樣做是不安全的邦马,應(yīng)當(dāng)真正地做證書(shū)校驗(yàn))

(2)支持Wap方式上網(wǎng)贱鼻,移動(dòng)、聯(lián)通滋将、電信代理的設(shè)置

(3)支持重定向邻悬、數(shù)據(jù)壓縮傳輸?shù)?/p>

(4)其他值得注意的問(wèn)題

自己寫(xiě)網(wǎng)絡(luò)框架可以完美地處理這些細(xì)節(jié),但時(shí)間成本比較大随闽。如果使用開(kāi)源框架父丰,一般都沒(méi)有處理這些細(xì)節(jié),因此我們可以在第三方框架上做些修改橱脸,這樣時(shí)間成本將會(huì)節(jié)省很多础米。

2.圖片管理模塊

圖片也是App中不可少的元素,而且圖片是占用內(nèi)存的大戶添诉,因此圖片管理框架特別重要屁桑,不好的圖片框架容易引起內(nèi)存泄露甚至導(dǎo)致崩潰。當(dāng)然可以自己實(shí)現(xiàn)圖片框架(目前我們也是這樣做的)栏赴,實(shí)現(xiàn)圖片的下載蘑斧、解碼、緩存等關(guān)鍵環(huán)節(jié)须眷。個(gè)人建議可以采用一些比較好的圖片庫(kù)竖瘾,也許會(huì)比我們自己管理圖片更完善和高效。我會(huì)推薦如下幾個(gè)圖片管理庫(kù):

(1)Glide花颗,Google的一些官方App捕传,如Google?photos都使用了,還要解釋更多嗎扩劝?

(2)Fresco庸论,F(xiàn)aceBook的開(kāi)源庫(kù),功能超級(jí)強(qiáng)大棒呛,支持WebP聂示、Gif、JPEG漸進(jìn)顯示簇秒,關(guān)鍵是其對(duì)圖片內(nèi)存的設(shè)計(jì)思想鱼喉,使得圖片內(nèi)存開(kāi)銷大大減少。

(3)Android-Universal-Image-Loader趋观,在出現(xiàn)上述圖片庫(kù)之前扛禽,貌似這個(gè)最火吧,之前個(gè)人的App中也用了它拆内。

(4)Picasso旋圆,Square的開(kāi)源庫(kù),據(jù)說(shuō)Glide就是參考Picasso設(shè)計(jì)的麸恍。

3.本地?cái)?shù)據(jù)庫(kù)模塊

也許你的App需要用到本地?cái)?shù)據(jù)庫(kù)灵巧,那么建議你采用流行的ORM框架,如ActiveAndroidgreenDAO抹沪,使用第三方庫(kù)會(huì)大大方便你對(duì)sqlite的操作刻肄,個(gè)人認(rèn)為在使用中我們需要注意數(shù)據(jù)庫(kù)升級(jí)以及多線程并發(fā)操作數(shù)據(jù)庫(kù)的問(wèn)題。

4.文件管理模塊

一個(gè)App融欧,肯定會(huì)涉及到一些文件敏弃,如配置文件、圖片噪馏、視頻麦到、音頻绿饵、SharedPreferences文件等。我們可以提供一個(gè)全局的文件管理模塊瓶颠,負(fù)責(zé)文件的增拟赊、刪、改粹淋、查等操作吸祟。另外還需支持文件壓縮,文件的上傳與下載操作桃移,對(duì)于下載需要支持多線程并發(fā)下載屋匕、斷點(diǎn)續(xù)傳等功能。

5.組件內(nèi)借杰、組件間通信機(jī)制

對(duì)于一個(gè)App过吻,組件通信必不可少,通信類型可以分為點(diǎn)對(duì)點(diǎn)和點(diǎn)對(duì)面的的通信蔗衡,點(diǎn)對(duì)點(diǎn)即只有唯一的接收者可以響應(yīng)消息疮装,點(diǎn)對(duì)面則類似于消息廣播,即所有注冊(cè)過(guò)的都可以響應(yīng)消息粘都。在Android 中廓推,通常使用消息機(jī)制來(lái)實(shí)現(xiàn),但消息機(jī)制的耦合度比較高翩隧。目前也有一些通信框架樊展,如EventBusOtto等事件總線框架堆生,這些框架可以極大地降低組件間的耦合专缠,但無(wú)法完美地實(shí)現(xiàn)點(diǎn)對(duì)點(diǎn)通信,因此建議消息機(jī)制和事件總線機(jī)制結(jié)合使用淑仆。

6.數(shù)據(jù)處理框架

其實(shí)還應(yīng)該有一個(gè)數(shù)據(jù)處理框架涝婉,當(dāng)發(fā)出數(shù)據(jù)請(qǐng)求后(走子線程),經(jīng)網(wǎng)絡(luò)模塊返回?cái)?shù)據(jù)(一般為JSON格式)蔗怠,JSON數(shù)據(jù)一般不能直接交給View層使用墩弯,需要解析成對(duì)應(yīng)的Model,同時(shí)如有需要寞射,還要緩存數(shù)據(jù)渔工,因此這些流程可以抽象成一個(gè)數(shù)據(jù)處理的框架。這個(gè)框架可以認(rèn)為接受數(shù)據(jù)請(qǐng)求的url桥温,并將數(shù)據(jù)Model返回給Activity或 Fragment引矩。對(duì)于JSON數(shù)據(jù)解析,建議使用fastjson,速度快且穩(wěn)定旺韭,缺省值也比較完善氛谜。

7.線程調(diào)度模塊

其實(shí)Android中有很多操作,如請(qǐng)求數(shù)據(jù)区端、下載圖片混蔼、清除緩存等都是需要在子線程中執(zhí)行的,往往很多時(shí)候都是直接起一個(gè)Thread來(lái)做了珊燎,這樣做就會(huì)很亂而且線程多了將難以管理。因此可以抽象出一個(gè)線程調(diào)度模塊遵湖,它維護(hù)一個(gè)線程池悔政,如果有需要線程的話就通過(guò)線程調(diào)度模塊取線程來(lái)做,這樣就方便統(tǒng)一管理延旧。當(dāng)然第三方庫(kù)中的線程操作我們將無(wú)法歸到線程調(diào)度模塊來(lái)管理谋国,但其他涉及到線程的操作都應(yīng)該來(lái)統(tǒng)一處理。

8.業(yè)務(wù)層

業(yè)務(wù)層大概就是四大組件迁沫、Fragment芦瘾、View了,建議盡可能地使用原生組件集畅,少用自定義組件近弟,因?yàn)樵M件性能是最好的。另外建議使用MVC模式就好挺智,只要設(shè)計(jì)管理好自己的邏輯祷愉,至于MVP、MVVM等模式個(gè)人認(rèn)為都有缺陷赦颇,總之尋求一個(gè)折中吧二鳄,有得必有失。

9.APK動(dòng)態(tài)加載機(jī)制

隨著App的增大媒怯,功能的擴(kuò)展订讼,很多App已經(jīng)采用了APK動(dòng)態(tài)加載的機(jī)制,也可以叫做插件化扇苞。由于本人沒(méi)有在實(shí)際的App中應(yīng)用過(guò)欺殿,所以不便發(fā)表過(guò)多評(píng)論。但這種機(jī)制個(gè)人認(rèn)為很有前途鳖敷,這種機(jī)制將利于App的解耦祈餐、功能擴(kuò)展和局部升級(jí)。具體可以參考一個(gè)商用的解決方案:ApkPlug-移動(dòng)應(yīng)用模塊化解決方案和一個(gè)開(kāi)源的APK動(dòng)態(tài)加載框架哄陶。

10.App的安全性考慮

Android?App的安全問(wèn)題很少有人重視帆阳,但這的確是一個(gè)很嚴(yán)重的問(wèn)題,一些好的App經(jīng)常被人破解。建議將一些核心算法等寫(xiě)成.so庫(kù)蜒谤,重要的邏輯放在服務(wù)器端山宾,數(shù)據(jù)請(qǐng)求采用加密等,另外打包APK時(shí)至少要混淆代碼鳍徽,還可以采用APK加殼機(jī)制资锰,總之這類的防范措施永遠(yuǎn)不嫌多。

一口氣漫無(wú)邏輯地寫(xiě)了這么多阶祭,可能會(huì)有遺漏的內(nèi)容绷杜,后續(xù)會(huì)補(bǔ)充完善。我想如果按照上述原則濒募,至少可以開(kāi)發(fā)出一款不錯(cuò)的App鞭盟。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市瑰剃,隨后出現(xiàn)的幾起案子齿诉,更是在濱河造成了極大的恐慌,老刑警劉巖晌姚,帶你破解...
    沈念sama閱讀 222,627評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件粤剧,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡挥唠,警方通過(guò)查閱死者的電腦和手機(jī)抵恋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)宝磨,“玉大人馋记,你說(shuō)我怎么就攤上這事“每荆” “怎么了梯醒?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,346評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)腌紧。 經(jīng)常有香客問(wèn)我茸习,道長(zhǎng),這世上最難降的妖魔是什么壁肋? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,097評(píng)論 1 300
  • 正文 為了忘掉前任号胚,我火速辦了婚禮,結(jié)果婚禮上浸遗,老公的妹妹穿的比我還像新娘猫胁。我一直安慰自己,他們只是感情好跛锌,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,100評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布弃秆。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪菠赚。 梳的紋絲不亂的頭發(fā)上脑豹,一...
    開(kāi)封第一講書(shū)人閱讀 52,696評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音衡查,去河邊找鬼瘩欺。 笑死,一個(gè)胖子當(dāng)著我的面吹牛拌牲,可吹牛的內(nèi)容都是我干的俱饿。 我是一名探鬼主播,決...
    沈念sama閱讀 41,165評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼塌忽,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼拍埠!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起砚婆,我...
    開(kāi)封第一講書(shū)人閱讀 40,108評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎突勇,沒(méi)想到半個(gè)月后装盯,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,646評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡甲馋,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,709評(píng)論 3 342
  • 正文 我和宋清朗相戀三年埂奈,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片定躏。...
    茶點(diǎn)故事閱讀 40,861評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡账磺,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出痊远,到底是詐尸還是另有隱情垮抗,我是刑警寧澤,帶...
    沈念sama閱讀 36,527評(píng)論 5 351
  • 正文 年R本政府宣布碧聪,位于F島的核電站冒版,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏逞姿。R本人自食惡果不足惜辞嗡,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,196評(píng)論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望滞造。 院中可真熱鬧续室,春花似錦、人聲如沸谒养。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,698評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至她渴,卻和暖如春达址,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背趁耗。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,804評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工沉唠, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人苛败。 一個(gè)月前我還...
    沈念sama閱讀 49,287評(píng)論 3 379
  • 正文 我出身青樓满葛,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親罢屈。 傳聞我的和親對(duì)象是個(gè)殘疾皇子嘀韧,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,860評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,324評(píng)論 25 707
  • 內(nèi)容抽屜菜單ListViewWebViewSwitchButton按鈕點(diǎn)贊按鈕進(jìn)度條TabLayout圖標(biāo)下拉刷新...
    皇小弟閱讀 46,791評(píng)論 22 665
  • 文詩(shī):丑乙 題語(yǔ):天知锄贷,地知,我知曼月,你知谊却。 《原來(lái),可以這樣愛(ài)你》 悄悄地溜進(jìn)你的夢(mèng)里哑芹,那是一個(gè)自我陶醉式的夢(mèng)境蘊(yùn)...
    詩(shī)人丑乙閱讀 261評(píng)論 6 4
  • “你最近過(guò)得怎么樣” 01 熟悉我的人炎辨,能覺(jué)出來(lái)我很多時(shí)候都是喪氣滿滿,很少有哪個(gè)時(shí)候充滿活力聪姿。也許是出于身體的原...
    超萌英雄閱讀 657評(píng)論 2 0
  • 姓名:樓靈芝 單位:杭州熙林服飾 【日精進(jìn)打卡第170天】 【知~學(xué)習(xí)】 《六項(xiàng)精進(jìn)》背誦1遍碴萧,共620遍; 《大...
    心鏡_8ef4閱讀 160評(píng)論 0 0