絕大部分的人學(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交互的橋梁。
高層接口不能废酷,不應(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)的處理操作。
是不是感覺瞬間邏輯上就變得清晰了起來谐檀?這就是我為什么推崇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)足夠用了诱建。
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 / ————
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?我會長成大樹放案,等你贊聲良木。