一、背景
2017年3月份8號(hào)參加了公司某APP研發(fā)會(huì)議,任務(wù)周期是一個(gè)星期的時(shí)間,并且是接口和APP同時(shí)開(kāi)發(fā),通過(guò)會(huì)議了解到APP預(yù)計(jì)要開(kāi)發(fā)近百個(gè)頁(yè)面,這對(duì)我來(lái)說(shuō)是個(gè)幾乎不能完成的任務(wù),但是最終在規(guī)定時(shí)間內(nèi)完成了所有功能開(kāi)發(fā)。
二、快速的開(kāi)發(fā)APP
1.前期的準(zhǔn)備工作
在應(yīng)急APP開(kāi)發(fā)任務(wù)之前,有一段項(xiàng)目后不忙碌時(shí)間,在這期間,我看技術(shù)博客以及技術(shù)書(shū)籍,然后將所學(xué)習(xí)的知識(shí)進(jìn)行編寫(xiě)Demo,而這些Demo為我下面的快速開(kāi)發(fā)打下了基礎(chǔ)
2.關(guān)于開(kāi)發(fā)工具
了解你的工具,我使用的是android
studio來(lái)進(jìn)行android開(kāi)發(fā),了解和熟悉android sudio會(huì)大大提高自己的開(kāi)發(fā)效率。
2.1使用鍵盤(pán)快捷鍵更快
下面就簡(jiǎn)單列舉一些我在開(kāi)發(fā)中常常用到的快捷鍵:
?代碼提示
“Control + Space”可以在代碼任意地方調(diào)出代碼提示,通過(guò)Enter鍵可以完成提示的輸入。另外Tab鍵同樣也可以完成輸入,區(qū)別是它會(huì)將后面已經(jīng)輸入的提示全部刪掉,而Enter會(huì)保留。
“Control +
Shift + Space”提示了更加智能的代碼。
“Option + Enter”可以獲取代碼的修改提示,不用每次再用鼠標(biāo)去點(diǎn)擊出現(xiàn)錯(cuò)誤的小紅點(diǎn)。
例如:Log.i(TAG,"TEST");點(diǎn)擊Option+Enter可以快速的獲取代碼提示,創(chuàng)建Tag.
?快速提示
“ALT + Enter”當(dāng)你寫(xiě)完一行代碼時(shí),還差一個(gè)分號(hào)、換行,并格式化代碼,出現(xiàn)錯(cuò)誤,需要獲得錯(cuò)誤提示。
?快速定位代碼錯(cuò)誤位置
“F2”當(dāng)你的代碼出現(xiàn)錯(cuò)誤時(shí),可以按“F2”快速定位到錯(cuò)誤位置
?代碼格式化
“Ctrl+Alt+L”
?生成代碼
“Alt+Insert”當(dāng)你需要重載某個(gè)父類(lèi)方法或生成get、set方法
?其他
還有更多方面的快捷鍵請(qǐng)參考:
http://www.android-studio.org/index.php/docs/experience/142-androidstudio-shortcut-keys
2.2使用插件變得更有效率
?Translate
翻譯插件,自己英文不好,使用這個(gè)插件可以大大提升英文翻譯效率
?Android Studio Prettify
從布局文件中生成對(duì)View的聲明(不使用注解)
?GsonFormat
根據(jù)json數(shù)據(jù)格式返回生成相應(yīng)的實(shí)體類(lèi)
2.3使用Live Templates
Live Template是展示在代碼完成選項(xiàng)中的快捷方式,當(dāng)你選擇它時(shí),IDE就會(huì)插入一段代碼片段,并讓你在需要輸入?yún)?shù)的地方進(jìn)行后續(xù)輸入。
例如:“fbc”對(duì)應(yīng)findViewById、對(duì)象.for可以自動(dòng)生成for循環(huán)等
3.關(guān)于封裝
?基類(lèi)庫(kù)
采用是公司android開(kāi)發(fā)的基礎(chǔ)框架庫(kù),里面針對(duì)Activity、Dialog等組件進(jìn)行了封裝,使我們開(kāi)發(fā)效率大大提升。
?網(wǎng)絡(luò)請(qǐng)求庫(kù)
App中少不了要用到網(wǎng)絡(luò)請(qǐng)求,網(wǎng)上已經(jīng)有很多優(yōu)秀的網(wǎng)絡(luò)請(qǐng)求框架okhttp、asynchttp等,如果我們直接使用第一是如果要更改參數(shù)那么所有使用到地方都需要更改,第二是如果要跟換網(wǎng)絡(luò)請(qǐng)求框架也需要修改全部代碼,所以我針對(duì)網(wǎng)絡(luò)請(qǐng)求采用工廠模式進(jìn)行了二次封裝:
1.創(chuàng)建網(wǎng)絡(luò)請(qǐng)求及網(wǎng)絡(luò)請(qǐng)求回調(diào)接口
2.創(chuàng)建網(wǎng)絡(luò)請(qǐng)求實(shí)現(xiàn)類(lèi)
3.創(chuàng)建網(wǎng)絡(luò)請(qǐng)求工廠類(lèi)
通過(guò)這三步的封裝,我們后面的網(wǎng)絡(luò)調(diào)用就變得非常的另外,并且可是隨時(shí)更換網(wǎng)絡(luò)請(qǐng)求框架并且只需要在工廠類(lèi)替換網(wǎng)絡(luò)請(qǐng)求實(shí)現(xiàn)。
?圖片加載庫(kù)
圖片庫(kù)的封裝和網(wǎng)絡(luò)請(qǐng)求庫(kù)一樣的原理。
?數(shù)據(jù)庫(kù)操作封裝
數(shù)據(jù)庫(kù)我們采用的是GreenDao框架,在之前的開(kāi)發(fā)中使用GreenDao查詢(xún)一個(gè)數(shù)據(jù)集采用以下寫(xiě)法:
Queryquery=oaApplication.getDaoSession().getBaseListDao()
.queryBuilder().where(BaseListDao.Properties.CodeType.eq(strings[downcount]),BaseListDao.Properties.Rid.eq(baseInfos.get(i).getRid()))
.build();
List infos = query.list();
這樣寫(xiě)也比較方便,但是要返回不同類(lèi)型數(shù)據(jù)就要?jiǎng)?chuàng)建不同類(lèi)型的QueryBuilder,所以我對(duì)GreenDao采用泛型進(jìn)行了操作封裝:
1.創(chuàng)建數(shù)據(jù)庫(kù)操作接口類(lèi)
2.創(chuàng)建數(shù)據(jù)庫(kù)操作實(shí)現(xiàn)類(lèi)
3.創(chuàng)建數(shù)據(jù)庫(kù)操作工廠類(lèi)
經(jīng)過(guò)封裝之后請(qǐng)求網(wǎng)絡(luò)采用下面的寫(xiě)法:
Listinfos=DBManagerFactory.getDBManagerImpl().queryListAll(BaseList.class, "codeType =" + strings[downcount] +" and rid = " +baseInfos.get(i).getRid());
4.關(guān)于第三方庫(kù)
使用第三方庫(kù)能夠大大提高我們的開(kāi)發(fā)效率,每個(gè)人習(xí)慣的庫(kù)不一樣,下面就是我經(jīng)常使用的第三方庫(kù)
?網(wǎng)絡(luò)請(qǐng)求android-async-http
?數(shù)據(jù)庫(kù)greenDAO(建議使用3.0以上版本,使用注解生成對(duì)應(yīng)Dao類(lèi)非常方便)
?Json數(shù)據(jù)解析FastJason
?圖片加載Glide
5.關(guān)于布局
在APP開(kāi)發(fā)中還有一項(xiàng)重要的工作就是UI布局,要提高開(kāi)發(fā)效率,提高布局的效率也是重中之重。
?清晰標(biāo)注的設(shè)計(jì)圖
當(dāng)我們拿到UI設(shè)計(jì)圖,如果色值、大小都沒(méi)有明確的標(biāo)識(shí),那我們肯定是兩眼一抹黑,所以我們需要美工人員配合給我們的設(shè)計(jì)稿是有明確標(biāo)識(shí)的,這樣我們才能開(kāi)展下一步的工作。
?使用統(tǒng)一的Values資源屬性
一般來(lái)說(shuō)我們很多的組件的顏色和字體是有一定的共通性的,我們要提取這一部分屬性在我們的資源內(nèi)建立統(tǒng)一的屬性如color.xml、dimens.xml等,這樣如果一旦共性的屬性要更改我們只需要更改對(duì)應(yīng)資源屬性即可完成所有頁(yè)面的更改。
?使用樣式
每個(gè)頁(yè)面標(biāo)題欄的標(biāo)題基本會(huì)有一樣的字體大小、顏色、對(duì)齊方式、內(nèi)間距、外間距等,很多按鈕也都使用一致的背景、內(nèi)間距、文字顏色、文字大小、文字的對(duì)齊方式,這個(gè)時(shí)候我們?nèi)绻麨槊總€(gè)組件來(lái)進(jìn)行屬性的設(shè)置那么工作量極大,而且一旦屬性發(fā)生變動(dòng)那么對(duì)應(yīng)的每個(gè)組件都必須重新修改,這個(gè)時(shí)候我們定義成樣式,相同屬性的組件設(shè)置統(tǒng)一的樣式,這樣不僅大大提升布局的效率,也提高了后期UI變動(dòng)的方便性。
?layout
xml中使用include
在APP開(kāi)發(fā)中很多布局的部分內(nèi)容是重復(fù)的,例如每個(gè)頁(yè)面的標(biāo)題欄,為了頁(yè)面的復(fù)用,我們可以將標(biāo)題欄獨(dú)立成一個(gè)布局xml,然后使用include標(biāo)簽來(lái)使用它,如下:
?tools:attribute
在UI布局的時(shí)候,我們希望看到TextView在有文字時(shí)候的預(yù)覽情況,之前我是直接給Text賦值,但是這樣一旦你在代碼中忘記給Text賦值,那么你界面顯示就是測(cè)試值,使用'tools:something="value"'這個(gè)值會(huì)顯示在預(yù)覽時(shí)候,但是在軟件真正運(yùn)行的時(shí)候不會(huì)出現(xiàn)這個(gè)內(nèi)容:
1.在根布局中添加xmlns:tools=http://schemas.android.com/tools
2.在TextView中使用'tools:text="value"'屬性
?ExtractResource
比如你在布局文件或者代碼文件中直接寫(xiě)了某個(gè)String字符串或者某個(gè)dimen數(shù)值,而不是引用資源文件,這個(gè)時(shí)候我們可以選中那個(gè)值,然后按alt+enter鍵選擇Extract String/Dimension Resource輸入資源名稱(chēng),就自動(dòng)創(chuàng)建了資源文件。
6.關(guān)于代碼
?代碼復(fù)用
在開(kāi)發(fā)APP的過(guò)程很多獲取基本數(shù)據(jù)的代碼是相同的,為了提高開(kāi)發(fā)效率,我們將這部分代碼放到公共類(lèi)里面,這樣所有的地方都可以使用,實(shí)現(xiàn)了代碼復(fù)用。
?靈活的界面顯示
在APP的開(kāi)發(fā)過(guò)程中,每個(gè)功能都一個(gè)對(duì)應(yīng)的詳情頁(yè)面,如果每個(gè)詳情頁(yè)面都進(jìn)行單獨(dú)開(kāi)發(fā)意味著要多開(kāi)發(fā)幾十個(gè)頁(yè)面,這是時(shí)候我們和后端的同事進(jìn)行討論所有的詳情頁(yè)面采用統(tǒng)一的數(shù)據(jù)返回格式,將不同的布局風(fēng)格按照編號(hào)分類(lèi),這樣我們APP端只需要按照這些規(guī)則做一個(gè)共用的詳情頁(yè),根據(jù)不同的編號(hào)生成不同的布局,通過(guò)這個(gè)共用頁(yè)面讓我能夠在短時(shí)間內(nèi)完成APP的開(kāi)發(fā),同時(shí)將原本預(yù)計(jì)近百個(gè)頁(yè)面壓縮至60幾個(gè)。