Android寶寶開(kāi)發(fā)日記(一)

?? 首先作為一名剛畢業(yè)從業(yè)不久的Android寶寶來(lái)說(shuō)这弧,第一次獨(dú)立開(kāi)發(fā)完成后我覺(jué)得很有必要梳理一下娃闲,一方面為了在以后的開(kāi)發(fā)路上如果遇到踩過(guò)的坑有個(gè)地方可以參考。另一方面為了以后矯情懷念的時(shí)候拿出來(lái)看一看匾浪。哈哈~廢話不多說(shuō)皇帮,進(jìn)入正題!

? 這篇文章我總結(jié)了在開(kāi)發(fā)中運(yùn)用到的技術(shù)和設(shè)計(jì)思想蛋辈,并且歸納了在實(shí)際開(kāi)發(fā)中遇到的一些問(wèn)題和解決方法属拾,如果大家有遇到此類問(wèn)題也可作參考,文章有不對(duì)的地方也歡迎大家指正冷溶。謝謝渐白!


一、設(shè)計(jì)模式

? 在本次開(kāi)發(fā)中我結(jié)合了databinding?實(shí)現(xiàn)了M-V-VM的架構(gòu)逞频,如圖:

轉(zhuǎn)載自網(wǎng)絡(luò)(M-V-VM)

? 關(guān)于M-V-VM模式纯衍,我目前的理解是:model層更像一個(gè)“倉(cāng)庫(kù)”,它負(fù)責(zé)存放各種數(shù)據(jù)(例如:bean和網(wǎng)絡(luò)請(qǐng)求后獲取到的JSON數(shù)據(jù)等)苗胀,而ViewModel層(業(yè)務(wù)邏輯的處理等)更像是一個(gè)“原材料加工廠”襟诸,它負(fù)責(zé)的是把"倉(cāng)庫(kù)"里面的東西拿出來(lái)經(jīng)過(guò)一定的加工后然后投放給“市場(chǎng)”(View)展示給消費(fèi)者(用戶)瓦堵。反過(guò)來(lái),當(dāng)“市場(chǎng)”(View)有新的需要時(shí)它將會(huì)通知“加工廠”(ViewModel)歌亲,“加工廠”會(huì)去“倉(cāng)庫(kù)”(Model)拿相應(yīng)的數(shù)據(jù)加工后返回給“市場(chǎng)”(View)菇用,這樣就達(dá)到了界面——業(yè)務(wù)——數(shù)據(jù)分離的效果。并且是符合面向?qū)ο蟮?a target="_blank" rel="nofollow">SRP(Single responsibility principle)原則 陷揪。

? 這樣的例子不知道大家能不能明白惋鸥,我當(dāng)時(shí)看了很多關(guān)于設(shè)計(jì)模式的資料,產(chǎn)生了一個(gè)疑惑:“M-V-VM模式雖然讓View和Model層解耦悍缠,互不可知卦绣,但是View和ViewModel不是也耦合了嗎?”帶著這個(gè)疑惑扮休,下面要開(kāi)始介紹databinding啦迎卤,它的出現(xiàn)可以解決我們這個(gè)疑惑,如果沒(méi)了解過(guò)databinding的同學(xué)可以點(diǎn)鏈接去看這篇文章拴鸵,這也是我當(dāng)時(shí)學(xué)習(xí)的文章玷坠,入門不錯(cuò)喲~



二、在項(xiàng)目中使用的技術(shù)


1.databinding

? databinding將界面和ViewModel在不耦合的情況下綁定起來(lái)劲藐,原因是為什么呢八堡?因?yàn)榻缑嬉玫倪^(guò)程是布局文件中進(jìn)行的,并且綁定操作也是發(fā)生在View層聘芜,ViewModel中沒(méi)有關(guān)于View中的任何引用兄渺。那么有的童鞋這時(shí)候就有疑問(wèn)了,沒(méi)有引用,那我從model層拿到數(shù)據(jù)之后如果要?jiǎng)討B(tài)顯示在界面上呢汰现?怎么辦挂谍?例如彈出Toast框,沒(méi)有context的話瞎饲,我怎么彈翱谛稹?我可是上過(guò)小學(xué)的人P嵴健妄田!小編不要騙我好嗎!驮捍!這位同學(xué)問(wèn)得好疟呐,差一點(diǎn)就讓小編我無(wú)言以對(duì)。不過(guò)這時(shí)候我就要引出databinding的另一個(gè)牛逼的屬性啦东且,那就是@BindingAdapter启具,它的作用是什么呢?大家都知道databinding可以使數(shù)據(jù)和視圖進(jìn)行綁定珊泳,當(dāng)數(shù)據(jù)發(fā)生改變時(shí)鲁冯,可以使用notifyPropertyChanged()來(lái)刷新被@Bindable標(biāo)記的變量囤踩。這是databinding的一大功能。但是databingding還有另外一個(gè)很強(qiáng)大的功能就是@BindingAdapter晓褪,它到底強(qiáng)大在哪呢堵漱?請(qǐng)看VCR!涣仿!

@BindingAdapter({"erroInfo"})

public static voidtoastErroInfo(View view,String erroInfo) {

? if(erroInfo !=null) {

?????? CustomToast.makeText(view.getContext(),erroInfo,Toast.LENGTH_SHORT).show();

?? }

}

?? 這是一段我封裝的關(guān)于彈出錯(cuò)誤信息提示的代碼勤庐,如果你看過(guò)我上面介紹的databinding使用文章的話,你應(yīng)該懂得他的意思好港。在我用@BindingAdapter這個(gè)方法后愉镰,我只需要在布局文件控件的屬性里面加上一句:app:erroInfo=“{viewModel.erroInfo}”,這樣我就可以輕易的彈出Toast框而又不會(huì)造成和viewModel耦合的問(wèn)題了钧汹,因?yàn)槲覉?zhí)行的操作都是在共有類里面的一個(gè)公有方法丈探,無(wú)論是哪個(gè)View和ViewModel綁定,只要你在所在布局文件的根目錄下設(shè)置了自定義屬性它把你要Toast的信息傳過(guò)來(lái)拔莱,他就能幫你顯示出來(lái)碗降,就是辣么神奇。

? 上面的例子只是一個(gè)小小的部分塘秦,databinding還支持大量的操作符讼渊,這一類問(wèn)題有一些也可以用操作符就可以解決的。在這里我就不一一舉例了尊剔,大家可以先去看文章爪幻。不懂得地方可以留言我們一起探討一起進(jìn)步~

2.RxJava

? 對(duì)于RxJava想必大家也不陌生吧,從一開(kāi)始只有小眾知道慢慢的到現(xiàn)在的主流须误。如果有不了解的童鞋可以去看這篇文章 挨稿。本人對(duì)RxJava的接觸不太久,很多方面并沒(méi)有深入了解京痢,所以只是表達(dá)一下到目前為止使用過(guò)RxJava的感受:”它的寫法從上到下奶甘,一條鏈?zhǔn)降恼{(diào)用,邏輯清晰历造,可讀性非常強(qiáng)甩十, 并且還可以自由的切換線程】圆”? 在這個(gè)項(xiàng)目中我只是把他運(yùn)用在Model層里面的網(wǎng)絡(luò)請(qǐng)求模塊中侣监,但RxJava的強(qiáng)大遠(yuǎn)不止這些,還有非常多非常多東西得等我們?nèi)W(xué)臣淤,具體也不一一介紹了橄霉,大家可以看看推薦的那篇文章。

3.Retrofit 2.0

? 對(duì)于配合RxJava邑蒋,我相信Retrofit2.0是最好的選擇了姓蜂。推薦大家可以去看這篇文章《Retrofit 2.0:有史以來(lái)最大的改進(jìn)》 按厘,這也是我當(dāng)時(shí)學(xué)習(xí)Retrofit看的一篇文章。

4.Picasso

? 支持二級(jí)緩存钱慢、加載錯(cuò)誤占位圖逮京、支持裁剪等等,僅僅一行代碼就可實(shí)現(xiàn)圖片異步加載束莫。關(guān)于學(xué)習(xí)文章的話網(wǎng)上數(shù)不勝數(shù)懒棉,這里我推薦我自己當(dāng)時(shí)學(xué)習(xí)的一篇《picasso-強(qiáng)大的Android圖片下載緩存庫(kù)》。

5.其他常用的第三方庫(kù)(百度地圖览绿、科大訊飛策严、zxing、百度推送等

? 這些第三方庫(kù)我就不一一介紹了饿敲,大家可以去相應(yīng)的官方網(wǎng)站觀看官方文檔妻导,非常詳細(xì),沒(méi)有什么難度怀各。



三倔韭、項(xiàng)目中遇上的“坑”


? 做這個(gè)項(xiàng)目的時(shí)候遇上了不少坑,也查閱了很多資料渠啤。最后總結(jié)出下面的一些問(wèn)題及當(dāng)時(shí)的解決辦法狐肢,一方面給我以后開(kāi)發(fā)提供參考添吗,另一方面大家如果也遇上了這類問(wèn)題也可以給大家一些解決思路沥曹。好了,不說(shuō)了碟联,先點(diǎn)菜吧<嗣馈!

(1)百度推送綁定成功但是無(wú)推送(大意篇)


問(wèn)題描述:這個(gè)問(wèn)題說(shuō)起來(lái)有點(diǎn)搞笑鲤孵,當(dāng)時(shí)我們后臺(tái)給出的文檔中壶栋,要求登錄時(shí)要上傳一個(gè)設(shè)備號(hào)的參數(shù),我當(dāng)時(shí)的代碼獲取的是手機(jī)本身的唯一設(shè)備號(hào)而不是百度推送綁定成功后返回的channelId普监,后面發(fā)現(xiàn)百度推送回調(diào)方法onBind()中有一個(gè)channelId的參數(shù)贵试,才猛然發(fā)現(xiàn)原來(lái)是這個(gè)問(wèn)題,后面把這個(gè)參數(shù)傳給后臺(tái)問(wèn)題就解決了凯正,這個(gè)顯然是我大意造成的毙玻,希望大家以此為戒哈哈!


解決辦法:將onBind()方法中的channelId作為參數(shù)上傳給后臺(tái)


(2)RecycleView中item的點(diǎn)擊事件


問(wèn)題描述: 因?yàn)橐郧笆褂玫亩际荓istView廊散,但看了一些RecycleView的介紹桑滩,感覺(jué)它比ListView更方便也更靈活。所以作為一個(gè)有探索精神的Android寶寶允睹,所以我也決定使用一下RecycleView到項(xiàng)目中运准,一開(kāi)始用的很順利幌氮,后面涉及到item點(diǎn)擊事件的時(shí)候,我想當(dāng)然的跟ListView一樣想setOnItemClickListener()把子條目的點(diǎn)擊事件給設(shè)置出來(lái)胁澳,可是找了半天發(fā)現(xiàn)竟然沒(méi)有8没ァ!韭畸!然后上網(wǎng)一查資料發(fā)現(xiàn)這是需要自己定義的慢洋,所以自己動(dòng)手實(shí)現(xiàn)了一次。


解決辦法:首先在adapter中設(shè)置一個(gè)onClickItem接口和一個(gè)setOnclickItem(ItemOnclickListener listener)方法陆盘,然后在ViewHolder中繼承點(diǎn)擊事件監(jiān)聽(tīng)普筹,實(shí)現(xiàn)接口即可。下面我貼出關(guān)鍵代碼:

public interface? MyItemClickListener {

???????? public voidonItemClick(View v, intpostion);

}

//設(shè)置item監(jiān)聽(tīng)

public void?? setOnItemClickListener(MyItemClickListener listener) {

this.mlistener= listener;

}

這段代碼是在adapter中定義的隘马,接下來(lái)貼出內(nèi)部類ViewHolder中的關(guān)鍵代碼:

public void? onClick(View view) {

if(mlistener!=null) {

mlistener.onItemClick(view,getLayoutPosition());

}

}

實(shí)現(xiàn)之后調(diào)用方法的方法為:

adapter.setOnItemClickListener(new MyItemClickListener({

? ? ? ? public void? onItemClick(View v, intpostion) {

?????? ? ? // 想實(shí)現(xiàn)的Item功能

})太防;




(3)關(guān)于PullToRefreshListView中的onRefreshComplete()方法無(wú)效


問(wèn)題描述:因?yàn)槲以谶@個(gè)項(xiàng)目中其他頁(yè)面也用到了onRefreshComplete()方法,但是發(fā)現(xiàn)并沒(méi)有出現(xiàn)這個(gè)問(wèn)題酸员,但是唯獨(dú)其中一個(gè)頁(yè)面使用這個(gè)方法無(wú)效蜒车,后面在我對(duì)比跟其他頁(yè)面的不同之處,找到了一點(diǎn)蛛絲馬跡(柯南背景音樂(lè)響起~):首先因?yàn)檫@個(gè)頁(yè)面的數(shù)據(jù)是已經(jīng)獲取好并且存儲(chǔ)在本地的數(shù)據(jù)幔嗦,之前那些頁(yè)面的數(shù)據(jù)是臨時(shí)從網(wǎng)絡(luò)獲取的酿愧。這樣的話就會(huì)產(chǎn)生一個(gè)問(wèn)題“加載過(guò)快,數(shù)據(jù)來(lái)不及顯示”邀泉。那么怎么辦呢嬉挡?


解決辦法:

? 我們可以延遲一秒左右,在調(diào)用onRefreshComplete()方法汇恤。代碼如下:

mBinding.lvCardDetail.postDelayed(newRunnable() {

@Override

public void run() {

??????? mBinding.lvCardDetail.onRefreshComplete();

}},1000);

注意:要在setAdapter后面執(zhí)行庞钢,不然是無(wú)效的!


(4)app在Android 5.0以下的手機(jī)崩潰


問(wèn)題描述:在項(xiàng)目終于要上線的時(shí)候因谎,進(jìn)入測(cè)試階段基括,發(fā)現(xiàn)app在Android5.0以下手機(jī)運(yùn)行直接崩潰。而且報(bào)的異常也是奇怪(當(dāng)時(shí)報(bào)的是xml解析異常和找不到類的異常)财岔,關(guān)鍵我的那些代碼都好好的呀风皿!在我查閱了很多資料依然沒(méi)有解決問(wèn)題的時(shí)候,萬(wàn)念俱灰下的我最后抱著死馬當(dāng)活馬醫(yī)的心態(tài)點(diǎn)開(kāi)了最后搜索的一篇文章匠璧,最后也就是這篇文章讓我恍然大悟桐款。


解決辦法:

? 因?yàn)槲翼?xiàng)目的總方法數(shù)超過(guò)了65536這個(gè)限制,所以Android 5.0之前的版本使用的Dalvik運(yùn)行時(shí)執(zhí)行應(yīng)用程序代碼患朱。默認(rèn)情況下鲁僚,Dalvik的限制的應(yīng)用程序,每APK一個(gè)classes.dex字節(jié)碼文件。為了解決這個(gè)限制冰沙,可以使用multidexsupportlibrary侨艾,成為您的應(yīng)用程序的主DEX文件的一部分,然后設(shè)法獲得了額外的DEX文件和它們所包含的代碼拓挥。

? 而在Android 5.0以及更高版本使用的是ARTruntime唠梨,可以支持原生從APK文件中加載多個(gè)dex文件。ART進(jìn)行預(yù)編譯的應(yīng)用程序安裝時(shí)它會(huì)掃描類(..N).dex文件侥啤,并通過(guò)Android設(shè)備編譯成一個(gè)單一的.oat文件執(zhí)行当叭,所以可以正常運(yùn)行。

圖片轉(zhuǎn)載自網(wǎng)絡(luò)


(5)部分新款A(yù)ndroid手機(jī)打開(kāi)地圖崩潰


問(wèn)題描述:測(cè)試時(shí)發(fā)現(xiàn)盖灸,部分新款A(yù)ndroid手機(jī)打開(kāi)地圖直接崩潰蚁鳖,但是大部分手機(jī)正常。這讓我很苦惱赁炎,當(dāng)時(shí)拿著問(wèn)題手機(jī)和正常運(yùn)行手機(jī)對(duì)比后發(fā)現(xiàn)一個(gè)共性醉箕,那就是問(wèn)題手機(jī)都是比較新款的手機(jī)。在網(wǎng)上一查資料發(fā)現(xiàn)徙垫,這是由于新款手機(jī)讀取不到我項(xiàng)目中l(wèi)ib文件夾中的so文件讥裤。原因是:沒(méi)有找到對(duì)應(yīng)的cpu架構(gòu)文件,讀取失敗姻报。


解決辦法:將百度地圖sdk更換為最新版己英,然后在project文件下的lib文件添加:arm64-v8a、x86吴旋、x86_64文件并把百度地圖sdk對(duì)應(yīng)的so文件也放入相應(yīng)的文件夾中损肛。重新運(yùn)行,正常~


(6)Android 6.0及更高版本系統(tǒng)拍照崩潰


問(wèn)題描述:這個(gè)問(wèn)題暴露的比較明顯邮府,Android 6.0以上的機(jī)型均出現(xiàn)此問(wèn)題荧关,查資料后發(fā)現(xiàn):在Android 6.0 以后除了在Manifests上聲明權(quán)限,有部分危險(xiǎn)權(quán)限還需要在代碼中動(dòng)態(tài)添加權(quán)限褂傀。


解決辦法:下面我舉的是關(guān)于動(dòng)態(tài)添加拍照權(quán)限的核心代碼,其它權(quán)限也是大同小異加勤。

<1>調(diào)用拍照前仙辟,檢查權(quán)限

//檢查權(quán)限

if(ContextCompat.checkSelfPermission(this,Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {

??????? //如果沒(méi)有授權(quán),則請(qǐng)求授權(quán)

??????? ActivityCompat.requestPermissions(this, newString[]{Manifest.permission.CAMERA},MY_PERMISSIONS_REQUEST_CALL_CAMERA);

}else{

??????? //有授權(quán)鳄梅,直接開(kāi)啟攝像頭

??????? callCamera();

}

<2>在Activity中調(diào)用onRequestPermissionsResult(int requestCode,@NonNullString[] permissions,@NonNullint[] grantResults)方法叠国。

//判斷請(qǐng)求碼

if(requestCode ==MY_PERMISSIONS_REQUEST_CALL_CAMERA) {

??????? //grantResults授權(quán)結(jié)果

??????? if(grantResults[0] == PackageManager.PERMISSION_GRANTED) {

??????? //成功,開(kāi)啟攝像頭

???????? callCamera();

}else{

??????? //授權(quán)失敗

??????? Toast.makeText(this,"Permission Denied",Toast.LENGTH_SHORT).show();

}

return;

這是其中的一個(gè)示例代碼戴尸,大家可以去參考這篇文章?粟焊,里面具體的介紹了此類問(wèn)題的解決辦法。


四、總結(jié)

? 這個(gè)項(xiàng)目中项棠,許多的錯(cuò)誤本是可以避免的悲雳,從而造成效率不升反降。下面我將會(huì)列舉在下個(gè)項(xiàng)目中自己要改進(jìn)的點(diǎn)香追,大家也可作參考:


1.布局文件中不要出現(xiàn)中文合瓢,統(tǒng)一放到res/values/strings下管理(重要指數(shù):★★★)

? 其實(shí)為什么要這樣做呢,因?yàn)槿绻笃谌绻膭?dòng)文字說(shuō)明或者復(fù)用文字說(shuō)明可以直接調(diào)用透典,而不用一遍又一遍的寫晴楔。當(dāng)然,一開(kāi)始直接寫在xml布局文件可能覺(jué)得更加方便峭咒∷捌可大家想一想,如果有20條文字說(shuō)明是一樣的并且分布在不同的頁(yè)面凑队,大家一遍又一遍的敲即使不累钙皮,可哪天產(chǎn)品過(guò)來(lái)說(shuō)要全部修改文字說(shuō)明,這時(shí)候是不是要一個(gè)頁(yè)面一個(gè)頁(yè)面的修復(fù)了顽决?(哈哈~這時(shí)候蛋碎了吧短条!知道錯(cuò)了吧?)


2.代碼中如果出現(xiàn)數(shù)字請(qǐng)統(tǒng)一聲明全局變量來(lái)管理才菠。(重要指數(shù):★★★★)

? 大家如果不懂什么意思我貼出代碼來(lái)大家瞬間就明白了:

(1)設(shè)想一下如果我想在一個(gè)集合里面刪除某一下標(biāo)的數(shù)據(jù)茸时,首先我可以這么做:

String[] arr=new String[“a”,“b”,“c”];

List<String> mList=new ArrayList<>();

//將數(shù)組賦值到集合中

for(int i=0;i<arr.length();i++){

??????? mList.add(arr[i]);

}

//點(diǎn)擊按鈕刪除第二個(gè)下標(biāo)

deleteButton.setOnclickListenner(new onClickListenner(){

??????? public void onClick(View v){

? ? ? ? ? ? ? ? mList.remove(1);

???????? }

});

或者我也可以這么做

String[] arr=new String["a","b","c"];

List mList=new ArrayList<>();

int delete_position=1;

//將數(shù)組賦值到集合中

for(int i=0;i<arr.length();i++){

? ? ? ? mList.add(arr[i]);

}

//點(diǎn)擊按鈕刪除第二個(gè)下標(biāo)

deleteButton.setOnclickListenner(new OnclickListenner(){

??????? public void onClick(View v){

???????????????? mList.remove(delete_position);

??????? }

});

可能從上面代碼看大家覺(jué)得兩種其實(shí)差不多,但是如果一個(gè)類里面一旦有很多個(gè)地方都需要?jiǎng)h除這個(gè)下標(biāo)數(shù)據(jù)的時(shí)候赋访,兩種代碼的差別就出來(lái)了可都。第一種方式你需要在每個(gè)地方都修改下標(biāo),如果是你剛開(kāi)發(fā)不久可能還記得哪些地方有牽連蚓耽,一旦久了的話如果有一個(gè)地方忘了修改渠牲,那bug君就要出來(lái)搞事了。第二種方式只需要輕輕松松在定義好的delete_position上修改那就輕松多了步悠!


3.開(kāi)發(fā)前務(wù)必把頁(yè)面邏輯梳理好签杈,畫好完整的流程圖在開(kāi)始開(kāi)發(fā)。(重要指數(shù):★★★★★)

? (開(kāi)發(fā)前務(wù)必把頁(yè)面邏輯梳理好鼎兽,畫好完整的流程圖在開(kāi)始開(kāi)發(fā)答姥!開(kāi)發(fā)前務(wù)必把頁(yè)面邏輯梳理好,畫好完整的流程圖在開(kāi)始開(kāi)發(fā)谚咬!開(kāi)發(fā)前務(wù)必把頁(yè)面邏輯梳理好鹦付,畫好完整的流程圖在開(kāi)始開(kāi)發(fā)!重要的事情說(shuō)三遍T褙浴G贸ぁ@杉蕖)小編深受其害。因?yàn)閯傞_(kāi)始開(kāi)發(fā)祈噪,很多時(shí)候了解業(yè)務(wù)邏輯之后大概梳理一下就開(kāi)始噠~噠~噠~噠~的敲代碼泽铛,可是敲到一半發(fā)現(xiàn)哎喲~不對(duì),有個(gè)地方出現(xiàn)了問(wèn)題钳降,當(dāng)時(shí)沒(méi)考慮到厚宰。然后就開(kāi)始刪代碼,刪到一些地方的時(shí)候又發(fā)現(xiàn)原來(lái)的代碼好像可以遂填,只需要加一點(diǎn)點(diǎn)條件就行了铲觉,然后又開(kāi)始敲~效率就在這里變得越來(lái)越低了!

? 所以這里大家一定要注意吓坚,了解業(yè)務(wù)之后首先在腦子大概的梳理一下然后畫出流程圖撵幽,畫好之后然后開(kāi)始完善流程圖,盡可能的把各種情況想清楚礁击,畫完之后在開(kāi)始開(kāi)發(fā)盐杂,這樣子開(kāi)發(fā)起來(lái)才有方向感,可以避免走很多彎路哆窿!


4.開(kāi)發(fā)前链烈,把整個(gè)app業(yè)務(wù)了解透徹,抽取共性挚躯。然后開(kāi)始開(kāi)發(fā)(重要指數(shù):★★★★★)

?? 這條和上條類似强衡,不過(guò)這條可能是更加宏觀一點(diǎn),貫穿了整個(gè)app码荔。在開(kāi)發(fā)前如果把a(bǔ)pp的業(yè)務(wù)了解透徹漩勤,抽取出共性,建立基類缩搅,開(kāi)發(fā)時(shí)候就可以直接在基類里面拓展越败,這樣可以省去十分多不必要的麻煩和少敲許多冗余的代碼。不過(guò)在前期規(guī)劃上可能要下一番功夫硼瓣,但是為了代碼的簡(jiǎn)潔和優(yōu)雅究飞,何樂(lè)而不為呢?


5.嘗試使用(MVP+Databinding+Dagger2+Retrofit 2.0+RxJava)(重要指數(shù):★★★★)

? 因?yàn)楫?dāng)時(shí)項(xiàng)目比較趕巨双,所以沒(méi)有學(xué)習(xí)Dagger2噪猾,目前正在學(xué)習(xí)并準(zhǔn)備將這套模式運(yùn)用在下個(gè)項(xiàng)目上。這套架構(gòu)也是目前Android的主流筑累,作為一個(gè)有求知精神的寶寶,怎么可能不學(xué)習(xí)呢丝蹭?


6.嘗試使用Kotlin語(yǔ)言開(kāi)發(fā)(重要指數(shù):★★)

? 如果沒(méi)有了解Kotlin語(yǔ)言的朋友可以去看一下這篇文章 慢宗。因?yàn)锳ndroid是基于Java語(yǔ)言開(kāi)發(fā)的,Kotlin這門語(yǔ)言支持一鍵java代碼轉(zhuǎn)換成Kotlin,有Java基礎(chǔ)的朋友上手并不難镜沽。目前本人也準(zhǔn)備上手這門語(yǔ)言并運(yùn)用到下個(gè)項(xiàng)目中敏晤,有興趣的童鞋可以了解了解~


7.擁有一個(gè)機(jī)械鍵盤(重要指數(shù):★★★★★★★★★★)

? 這條其實(shí)是搞笑的~大家可以忽略!缅茉!不過(guò)擁有一個(gè)機(jī)械鍵盤敲代碼還是十分有feel的嘴脾!有條件的童鞋還是可以考慮的哈哈。


? 好啦~這次的開(kāi)發(fā)日記就到這里啦~也算是對(duì)自己前段時(shí)間的一次總結(jié)吧蔬墩!因?yàn)檫@是我第一次發(fā)表文章译打,寫的不好的地方請(qǐng)各位多多包涵并給我留言做出改進(jìn)~謝謝^.^!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末拇颅,一起剝皮案震驚了整個(gè)濱河市奏司,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌樟插,老刑警劉巖韵洋,帶你破解...
    沈念sama閱讀 218,036評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異黄锤,居然都是意外死亡搪缨,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門鸵熟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)副编,“玉大人,你說(shuō)我怎么就攤上這事旅赢〕萏遥” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 164,411評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵煮盼,是天一觀的道長(zhǎng)短纵。 經(jīng)常有香客問(wèn)我,道長(zhǎng)僵控,這世上最難降的妖魔是什么香到? 我笑而不...
    開(kāi)封第一講書人閱讀 58,622評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮报破,結(jié)果婚禮上悠就,老公的妹妹穿的比我還像新娘。我一直安慰自己充易,他們只是感情好梗脾,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著盹靴,像睡著了一般炸茧。 火紅的嫁衣襯著肌膚如雪瑞妇。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 51,521評(píng)論 1 304
  • 那天梭冠,我揣著相機(jī)與錄音辕狰,去河邊找鬼。 笑死控漠,一個(gè)胖子當(dāng)著我的面吹牛蔓倍,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播盐捷,決...
    沈念sama閱讀 40,288評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼偶翅,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了毙驯?” 一聲冷哼從身側(cè)響起倒堕,我...
    開(kāi)封第一講書人閱讀 39,200評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎爆价,沒(méi)想到半個(gè)月后垦巴,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,644評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡铭段,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評(píng)論 3 336
  • 正文 我和宋清朗相戀三年骤宣,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片序愚。...
    茶點(diǎn)故事閱讀 39,953評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡憔披,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出爸吮,到底是詐尸還是另有隱情芬膝,我是刑警寧澤,帶...
    沈念sama閱讀 35,673評(píng)論 5 346
  • 正文 年R本政府宣布形娇,位于F島的核電站锰霜,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏桐早。R本人自食惡果不足惜癣缅,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望哄酝。 院中可真熱鬧友存,春花似錦、人聲如沸陶衅。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,889評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)搀军。三九已至侠驯,卻和暖如春抡秆,著一層夾襖步出監(jiān)牢的瞬間奕巍,已是汗流浹背吟策。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,011評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留的止,地道東北人檩坚。 一個(gè)月前我還...
    沈念sama閱讀 48,119評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像诅福,于是被迫代替她去往敵國(guó)和親匾委。 傳聞我的和親對(duì)象是個(gè)殘疾皇子苦锨,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評(píng)論 2 355

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