代碼的世界不需要睡覺

絕大部分的人學(xué)完Kotlin的一些基礎(chǔ)之后食拜,會感覺很不知所措杖挣,不知道接下來要學(xué)的是什么荧止,這里為大家介紹以下Kotlin的主流技術(shù)



?MVP框架

MVP代表Model吹泡,View和Presenter酪术。

View :負(fù)責(zé)視圖部分展示器瘪、視圖事件處理。Activity绘雁、Fragment娱局、Dialog、ViewGroup等呈現(xiàn)視圖的組件都可以承擔(dān)該角色咧七。

Model:負(fù)責(zé)數(shù)據(jù)的請求、解析任斋、過濾等數(shù)據(jù)層的操作继阻。

Presenter:View和Model交互的橋梁。

基于MVP架構(gòu)的模式之一

高層接口不能废酷,不應(yīng)該,并且必須不了解底層接口的細(xì)節(jié)瘟檩,是(面向)抽象的,并且是細(xì)節(jié)隱藏澈蟆。外圓是實(shí)現(xiàn)機(jī)制墨辛,內(nèi)圓是核心策略。

?AnKo

Anko主要的目的是用來替代以前XML的方式來使用代碼生成UI布局趴俘。

如何使用AnKo呢睹簇?

一個Anko擴(kuò)展函數(shù)可以被用來簡化獲取一個RecyclerView

//原始的寫法

//val mRecyclerView = findViewById(R.id.person_list) as RecyclerView

//使用Anko擴(kuò)展函數(shù)

val mRecyclerView: RecyclerView = find(R.id.person_list)

擴(kuò)展函數(shù)

擴(kuò)展函數(shù)是指在一個類上增加一種新的行為奏赘,Kotlin中擴(kuò)展函數(shù)的一個優(yōu)勢是我們不需要在調(diào)用方法的時候把整個對象當(dāng)作參數(shù)傳入。

舉個例子太惠,我們可以創(chuàng)建一個toast函數(shù)磨淌,這個函數(shù)不需要傳入任何context,它可以被任何Context或者它的子類調(diào)用凿渊,比如Activity或者Service:

fun Context.toast(message: CharSequence,duration: Int = Toast.LENGTH_SHORT){ ? ? ? ?Toast.makeText(this,message,duration).show() ? ?}

這個方法可以在Activity內(nèi)部直接調(diào)用:

toast("Hello World")toast("Hello world",Toast.LENGTH_LONG)

Anko提供了一些針對CharSequence和resource的函數(shù)梁只,還有兩個不同的toast和longToast方法:

toast("hello world!") ? ? ??

longToast(R.string.app_name)


?Glide

Android在使用圖片的時候是相當(dāng)麻煩的,因?yàn)樾枰粋€像素一個像素地加載這些圖片到內(nèi)存埃脏。如果你這時候使用了一個像Glide一樣經(jīng)過不斷優(yōu)化和嚴(yán)格測試的圖片處理庫搪锣,你會慶幸你節(jié)省了大量的時間。

添加Glide到AndroidStudio項(xiàng)目中

和大多數(shù)依賴庫一樣彩掐,在Gradle項(xiàng)目中只需要在build.gradle中添加一行:(可直接copy)

compile?'com.github.bumptech.glide:glide:3.7.0'

常見設(shè)置? ??

placeholder()?占位圖片

error()?加載失敗

crossFade()淡入淡出

dontAnimate()無動畫效果

override()調(diào)整圖片大小

transform()自定義圖形轉(zhuǎn)換

skipMemoryCache(true)不做內(nèi)存緩存

diskCacheStrategy(DiskCacheStrategy.ALL)磁盤緩存

DiskCacheStrategy.ALL?緩存所有版本的圖片

DiskCacheStrategy.NONE?不緩存任何圖片

DiskCacheStrategy.SOURCE?只緩存全分辨率的圖像

DiskCacheStrategy.RESULT?只緩存經(jīng)過處理的圖片


?Rxkotlin

RxKotlin :一個在JVM上使用可觀測的序列來組成異步的、基于事件的程序的庫佩谷。

下列是用java 和 kotlin 寫的例子:讀取一組文件夾中png格式的圖片旁壮,并在UI界面上進(jìn)行相應(yīng)的處理操作。

(Java版)


(Kotlin版)

是不是感覺瞬間邏輯上就變得清晰了起來谐檀?這就是我為什么推崇kotlin和響應(yīng)式編程的理由抡谐。、


?RxAndroid

Android 是一個讓你開始響應(yīng)式編程的好地方桐猬。RxAndroid 使這一切更加簡單麦撵,它將異步 UI 事件封裝得更像 RxJava,RxAndroid是RxJava的一個針對

Android

平臺的擴(kuò)展溃肪,主要用于 Android 開發(fā)免胃。?

對于android開發(fā)者來說,只需要在build.gradle文件中加入下面的代碼就可以了:

compile 'io.reactivex:rxandroid:1.2.0'

compile 'io.reactivex:rxjava:1.1.5'


?RxBus

RxBus是以observable 與 Subscriber 實(shí)現(xiàn)的惫撰,正常注冊訂閱所傳遞的參數(shù)我們都是可以傳遞的羔沙。在項(xiàng)目中我們不例外的都是 Activity、Fragment 互相與各自間的傳遞 String Object厨钻!

RxBus.getInstance().post(AppConstant.CHANNEL_SWAP,new ChannelItemMoveEvent(fromPosition, toPosition));

是不是感覺很方便扼雏,一步post掉任何Object與String的參數(shù)。


?Retrofit+Dagger2

Dagger2:依賴注入框架夯膀,用來解決依賴 除了基本依賴 mvp的V–>P–>M的之間依賴也輕松解決 方便不少诗充。

Retrofit:用來解決M的RestApi數(shù)據(jù)獲取, 天然支持Rxjava 不過這里我沒用到Rxjava 其自帶的Callback已經(jīng)足夠用了诱建。

(dagger2的依賴結(jié)構(gòu))


Retrofit的簡單使用例子

要使用retrofit請求網(wǎng)絡(luò)數(shù)據(jù)蝴蜓,大概可以分為以下幾步

1)添加依賴,這里以AndroidStudio為例:在build.grale添加如下依賴:

compile 'com.squareup.retrofit2:retrofit:2.1.0'

compile 'com.squareup.retrofit2:converter-gson:2.1.0'

2) 創(chuàng)建Retrofit對象

Retrofit retrofit = new Retrofit.Builder() ? ? ? ?

????//使用自定義的mGsonConverterFactory ? ? ? ?.addConverterFactory(GsonConverterFactory.create())

????????.baseUrl("http://apis.baidu.com/txapi/") ? ? ? ?.build();mApi = retrofit.create(APi.class);

3)發(fā)起網(wǎng)絡(luò)請求

mApi = retrofit.create(APi.class);Call<News> news = mApi.getNews("1", "10");news.enqueue(new Callback<News>() { ? ?@Override

?public void onResponse(Call<News> call, Response<News> response) { ? ?} ??

@Override

public void onFailure(Call<News> call, Throwable t) { ? ?}});

public interface APi { ? ?@Headers("apikey:81bf9da930c7f9825a3c3383f1d8d766") ? ?

????@GET("word/word")

????Call<News> getNews(@Query("num") String num,@Query("page")String page);}

到此一個簡單的使用retrofit的網(wǎng)絡(luò)請求就完成了。

?ARouter?

ARouter是阿里巴巴開源的Android平臺中對頁面茎匠、服務(wù)提供路由功能的中間件格仲,提倡的是簡單且夠用。

典型的應(yīng)用:

????從外部URL映射到內(nèi)部頁面汽抚,以及參數(shù)傳遞與解析

????跨模塊頁面跳轉(zhuǎn)抓狭,模塊間解耦

????攔截跳轉(zhuǎn)過程,處理登陸造烁、埋點(diǎn)等邏輯

????跨模塊API調(diào)用否过,通過控制反轉(zhuǎn)來做組件解耦

ARouter 配置

android {

defaultConfig {

...

javaCompileOptions {

annotationProcessorOptions {

arguments = [ moduleName : project.getName() ]

}

}

}

}

dependencies {

compile 'com.alibaba:arouter-api:1.2.1.1'

?annotationProcessor 'com.alibaba:arouter-compiler:1.1.2.1'

?}


api 的版本和 compiler 的版本號需要用最新的。最新的版本在 Github上可以找到惭蟋。


看到這里大家會不會還是覺得一臉懵逼苗桂,即使學(xué)完了Kotlin的主流技術(shù),但還是不知所措的告组。所謂學(xué)以致用煤伟,這個時候,你們就需要尋找一個實(shí)戰(zhàn)機(jī)會木缝。

實(shí)訓(xùn)邦《Kotlin電商項(xiàng)目》便锨,帶你實(shí)戰(zhàn)檢驗(yàn)!



還有前置課程《咀嚼Kotlin》我碟,讓你細(xì)細(xì)品味~


本文參考資料

mvp:https://blog.csdn.net/Sayangnala/article/details/52797232

AnKo:https://blog.csdn.net/u014005316/article/details/72572240

Glide:https://blog.csdn.net/Departure/article/details/51698625

Rxkotlin:http://www.reibang.com/p/81aba2f6b31c

RxAndroid: https://blog.csdn.net/zhangh91722/article/details/70214492

RxBus: https://blog.csdn.net/XiaozhouBaiyong/article/details/65440806

Retrofit+Dagger2:https://blog.csdn.net/tiankong1206/article/details/46486401

https://blog.csdn.net/gdutxiaoxu/srticle/details/52745491

ARouter: https://blog.csdn.net/zhaoyanjun6/article/details/76165252

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?———— / END / ————

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?我會長成大樹放案,等你贊聲良木。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末矫俺,一起剝皮案震驚了整個濱河市吱殉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌厘托,老刑警劉巖友雳,帶你破解...
    沈念sama閱讀 216,919評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異铅匹,居然都是意外死亡押赊,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,567評論 3 392
  • 文/潘曉璐 我一進(jìn)店門包斑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來考杉,“玉大人,你說我怎么就攤上這事舰始。” “怎么了咽袜?”我有些...
    開封第一講書人閱讀 163,316評論 0 353
  • 文/不壞的土叔 我叫張陵丸卷,是天一觀的道長。 經(jīng)常有香客問我询刹,道長谜嫉,這世上最難降的妖魔是什么萎坷? 我笑而不...
    開封第一講書人閱讀 58,294評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮沐兰,結(jié)果婚禮上哆档,老公的妹妹穿的比我還像新娘。我一直安慰自己住闯,他們只是感情好瓜浸,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,318評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著比原,像睡著了一般插佛。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上量窘,一...
    開封第一講書人閱讀 51,245評論 1 299
  • 那天雇寇,我揣著相機(jī)與錄音,去河邊找鬼蚌铜。 笑死锨侯,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的冬殃。 我是一名探鬼主播囚痴,決...
    沈念sama閱讀 40,120評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼造壮!你這毒婦竟也來了渡讼?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,964評論 0 275
  • 序言:老撾萬榮一對情侶失蹤耳璧,失蹤者是張志新(化名)和其女友劉穎成箫,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體旨枯,經(jīng)...
    沈念sama閱讀 45,376評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蹬昌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,592評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了攀隔。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片皂贩。...
    茶點(diǎn)故事閱讀 39,764評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖昆汹,靈堂內(nèi)的尸體忽然破棺而出明刷,到底是詐尸還是另有隱情,我是刑警寧澤满粗,帶...
    沈念sama閱讀 35,460評論 5 344
  • 正文 年R本政府宣布辈末,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏挤聘。R本人自食惡果不足惜轰枝,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,070評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望组去。 院中可真熱鬧鞍陨,春花似錦、人聲如沸从隆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,697評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽广料。三九已至砾脑,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間艾杏,已是汗流浹背韧衣。 一陣腳步聲響...
    開封第一講書人閱讀 32,846評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留购桑,地道東北人畅铭。 一個月前我還...
    沈念sama閱讀 47,819評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像勃蜘,于是被迫代替她去往敵國和親硕噩。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,665評論 2 354

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

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,085評論 25 707
  • 用兩張圖告訴你缭贡,為什么你的 App 會卡頓? - Android - 掘金 Cover 有什么料炉擅? 從這篇文章中你...
    hw1212閱讀 12,715評論 2 59
  • Google在今年的IO大會上宣布,將Android開發(fā)的官方語言更換為Kotlin阳惹,作為跟著Google玩兒An...
    藍(lán)灰_q閱讀 76,858評論 31 489
  • afinalAfinal是一個android的ioc谍失,orm框架 https://github.com/yangf...
    passiontim閱讀 15,429評論 2 45
  • 設(shè)計模式與原則 設(shè)計模式原則是為了提高代碼的可維護(hù)性,可復(fù)用性和可擴(kuò)展性莹汤,設(shè)計模式是設(shè)計模式原則的具體體現(xiàn)快鱼。 設(shè)計...
    黃二的NPE閱讀 255評論 0 0