Google在今年的IO大會(huì)上宣布,將Kotlin作為Android開發(fā)的一級(jí)語言。作為緊跟潮流的弄潮兒,對(duì)kotlin稍做了解后,發(fā)現(xiàn)其有優(yōu)秀的特性,所以就開始了學(xué)習(xí),而Eyepetizer-in-Kotlin便是對(duì)kotlin進(jìn)行學(xué)習(xí)后的階段性成果。
一、screenshot
1.啟動(dòng)界面

2.主界面


3.視頻界面

4.搜索界面

5.緩存界面

Github地址:Eyepetizer-in-Kotlin
二、app介紹
1.數(shù)據(jù)來源
Eyepetizer-in-Kotlin的所有數(shù)據(jù)來源自開眼視頻,不涉及任何商業(yè)用途,有如侵權(quán),立即刪除。
具體api接口可以參考項(xiàng)目中的Api類。
2.功能
含有開眼視頻每日推薦、熱門及分類小視頻
支持視頻播放,包含全屏播放等特性
支持關(guān)鍵詞搜索,想看什么看什么
記錄歷史觀看,以及緩存視頻,本地播放等功能
3.特點(diǎn)
作為學(xué)習(xí)kotlin的一款app,在擼代碼的過程中學(xué)習(xí)kotlin的語法及特性。
Eyepetizer-in-Kotlin適合初學(xué)者作為學(xué)習(xí)kotlin語言的一個(gè)項(xiàng)目,可以在做項(xiàng)目的同時(shí)體驗(yàn)到kotlin語言的優(yōu)點(diǎn)。
三、kotlin特性
在做Eyepetizer-in-Kotlin的過程中,了解到了許多kotlin的特性,用在日常開發(fā)中,大大提高了開發(fā)效率,下面就簡(jiǎn)單介紹下在項(xiàng)目中用到的幾個(gè)重要的kotlin特性。
(1) 和findViewById說再見
我們可以直接使用xml中對(duì)應(yīng)的id,并且import對(duì)應(yīng)的文件,不在需要findViewById
import kotlinx.android.synthetic.main.activity_watch.*
.........
tv_hint.visibility = View.VISIBLE
tv_hint.text = "告別findViewById"
(2) 延遲加載
延遲加載有幾個(gè)好處。首先由于加載時(shí)機(jī)推遲到了變量被訪問時(shí),因此它可以提高應(yīng)用的啟動(dòng)速度。其次,這樣的延遲加載也有更高的內(nèi)存效率。
val mModel: FindDetailModel by lazy {
FindDetailModel()
}
當(dāng)?shù)谝淮问褂胢Modle的時(shí)候進(jìn)行初始化
lateinit var mAdapter: DownloadAdapter
在任何想進(jìn)行初始化的位置進(jìn)行初始化
(3) Lambdas 表達(dá)式
Lambdas 表達(dá)式在減少源文件中代碼的總行數(shù)的同時(shí),也支持函數(shù)式編程。
使用 lambdas 表示式時(shí),onClickListener 的用法如下:
holder?.itemView?.setOnClickListener {
var keyWord = list?.get(position)
var intent : Intent = Intent(context,ResultActivity::class.java)
intent.putExtra("keyWord",keyWord)
context?.startActivity(intent)
mDialogListener?.onDismiss()
}
(4) 數(shù)據(jù)類
數(shù)據(jù)類簡(jiǎn)化了類的定義,自動(dòng)為類添加equals(),hashCode(),copy() 和toString() 方法。它明確定義了 model 類的意圖,以及應(yīng)該包含什么內(nèi)容,同時(shí)將純數(shù)據(jù)與業(yè)務(wù)邏輯分離開來。
data class VideoBean(var feed:String?,var title:String?,var description:String?,
var duration: Long?,var playUrl: String?,var category: String?,
var blurred : String?,var collect:Int?,var share:Int?,var reply:Int?,var time:Long) : Parcelable,Serializable {}
就是如此簡(jiǎn)單,對(duì)比以前動(dòng)輒幾百行的數(shù)據(jù)類,簡(jiǎn)潔了太多。如果想實(shí)現(xiàn)序列化Parcelable,可以下載支持kotlin序列化的插件,一鍵實(shí)現(xiàn),非常方便。
(5) 集合過濾
通過使用 Kotlin 的集合過濾功能,我們可以使代碼變得更清晰簡(jiǎn)潔。
bean.issueList!!
.flatMap { it.itemList!! }
.filter { it.type.equals("video") }
.forEach { mList.add(it) }
通過以上過濾,便可以得到我們想要的內(nèi)容。
(6) 擴(kuò)展
擴(kuò)展的好處在于它允許我們?yōu)橐粋€(gè)類添加功能同時(shí)無需繼承它。例如,你是否曾經(jīng)希望 Context 有某些方法,比如 showToast()?使用擴(kuò)展,你可以很容易實(shí)現(xiàn)這個(gè)功能:
fun Context.showToast(message: String) : Toast {
var toast : Toast = Toast.makeText(this,message,Toast.LENGTH_SHORT)
toast.setGravity(Gravity.CENTER,0,0)
toast.show()
return toast
}
(7) 其他特性
字符串
Kotlin在字符串之中可以使用變量,相對(duì)與在Java中的字符串拼接,更讓人感覺到舒服。
holder?.tv_detail?.text = "發(fā)布于 $category / $realMinute:$realSecond"
when
Kotlin中when的出現(xiàn)替代了switch,但其功能更加強(qiáng)大。
override fun onClick(v: View?) {
when(v?.id){
R.id.tv_watch ->{
var intent = Intent(activity,WatchActivity::class.java)
startActivity(intent)
}
R.id.tv_advise ->{
var intent = Intent(activity,AdviseActivity::class.java)
startActivity(intent)
}
R.id.tv_save ->{
var intent = Intent(activity,CacheActivity::class.java)
startActivity(intent)
}
}
}
當(dāng)然Kotlin的特性不止如此,還有更多高階的特性如:高階函數(shù), Anko等,這些特性還需進(jìn)一步學(xué)習(xí)應(yīng)用
四、為什么要學(xué)Kotlin?
關(guān)于為什么要學(xué)Kotlin,在Google IO大會(huì)剛把kotlin作為一級(jí)開發(fā)語言后就已經(jīng)有了很多的討論。
當(dāng)時(shí)學(xué)習(xí)的必要性還不明確,過了幾個(gè)月之后,我們?cè)賮砜匆幌聦W(xué)習(xí)的必要性。
1.語言層面
通過以上分析,我們可以知道kotlin對(duì)于android開發(fā)的優(yōu)勢(shì),同時(shí)kotlin也是基于JVM的一門靜態(tài)語言,與Java完美兼容,不存在項(xiàng)目遷移等問題。除此之外,學(xué)習(xí)成本也比較低,很好入門。當(dāng)然如果想要達(dá)到熟練程度,還需繼續(xù)練習(xí)。
2.形勢(shì)層面
國(guó)外:Pinterest、Evernote、Uber等企業(yè)已經(jīng)開始應(yīng)用,Google也在一些小項(xiàng)目中應(yīng)用kotlin,Google一些專家非??春肒otlin。
國(guó)內(nèi):據(jù)我所知,美團(tuán)已經(jīng)開始使用kotlin。一些大型互聯(lián)網(wǎng)公司由于業(yè)務(wù)導(dǎo)向,開發(fā)壓力重,不敢輕易使用kotlin,不過它們已經(jīng)開始躍躍欲試,著手在新的項(xiàng)目中使用kotlin。
講了這么多,學(xué)習(xí)kotlin雖然不是必須的,但是應(yīng)對(duì)趨勢(shì)發(fā)展,并且學(xué)習(xí)成本不高,那么多掌握一門技能,百利而無一害。
Github地址:https://github.com/LRH1993/Eyepetizer-in-Kotlin
喜歡就給個(gè)star,希望能對(duì)大家學(xué)習(xí)kotlin有幫助!