Google在今年的IO大會上宣佈,將Kotlin作爲Android開發的一級語言。作爲緊跟潮流的弄潮兒,對kotlin稍做了解後,發現其有優秀的特性,所以就開始了學習,而Eyepetizer-in-Kotlin便是對kotlin進行學習後的階段性成果。
一、screenshot
1.啓動界面
2.主界面
3.視頻界面
4.搜索界面
5.緩存界面
Github地址:Eyepetizer-in-Kotlin
二、app介紹
1.數據來源
Eyepetizer-in-Kotlin的所有數據來源自開眼視頻,不涉及任何商業用途,有如侵權,立即刪除。
具體api接口可以參考項目中的Api類。
2.功能
含有開眼視頻每日推薦、熱門及分類小視頻
支持視頻播放,包含全屏播放等特性
支持關鍵詞搜索,想看什麼看什麼
記錄歷史觀看,以及緩存視頻,本地播放等功能
3.特點
作爲學習kotlin的一款app,在擼代碼的過程中學習kotlin的語法及特性。
Eyepetizer-in-Kotlin適合初學者作爲學習kotlin語言的一個項目,可以在做項目的同時體驗到kotlin語言的優點。
三、kotlin特性
在做Eyepetizer-in-Kotlin的過程中,瞭解到了許多kotlin的特性,用在日常開發中,大大提高了開發效率,下面就簡單介紹下在項目中用到的幾個重要的kotlin特性。
(1) 和findViewById說再見
我們可以直接使用xml中對應的id,並且import對應的文件,不在需要findViewById
import kotlinx.android.synthetic.main.activity_watch.*
.........
tv_hint.visibility = View.VISIBLE
tv_hint.text = "告別findViewById"
(2) 延遲加載
延遲加載有幾個好處。首先由於加載時機推遲到了變量被訪問時,因此它可以提高應用的啓動速度。其次,這樣的延遲加載也有更高的內存效率。
val mModel: FindDetailModel by lazy {
FindDetailModel()
}
當第一次使用mModle的時候進行初始化
lateinit var mAdapter: DownloadAdapter
在任何想進行初始化的位置進行初始化
(3) Lambdas 表達式
Lambdas 表達式在減少源文件中代碼的總行數的同時,也支持函數式編程。
使用 lambdas 表示式時,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) 數據類
數據類簡化了類的定義,自動爲類添加equals(),hashCode(),copy() 和toString() 方法。它明確定義了 model 類的意圖,以及應該包含什麼內容,同時將純數據與業務邏輯分離開來。
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 {}
就是如此簡單,對比以前動輒幾百行的數據類,簡潔了太多。如果想實現序列化Parcelable,可以下載支持kotlin序列化的插件,一鍵實現,非常方便。
(5) 集合過濾
通過使用 Kotlin 的集合過濾功能,我們可以使代碼變得更清晰簡潔。
bean.issueList!!
.flatMap { it.itemList!! }
.filter { it.type.equals("video") }
.forEach { mList.add(it) }
通過以上過濾,便可以得到我們想要的內容。
(6) 擴展
擴展的好處在於它允許我們爲一個類添加功能同時無需繼承它。例如,你是否曾經希望 Context 有某些方法,比如 showToast()?使用擴展,你可以很容易實現這個功能:
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在字符串之中可以使用變量,相對與在Java中的字符串拼接,更讓人感覺到舒服。
holder?.tv_detail?.text = "發佈於 $category / $realMinute:$realSecond"
when
Kotlin中when的出現替代了switch,但其功能更加強大。
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)
}
}
}
當然Kotlin的特性不止如此,還有更多高階的特性如:高階函數, Anko等,這些特性還需進一步學習應用
四、爲什麼要學Kotlin?
關於爲什麼要學Kotlin,在Google IO大會剛把kotlin作爲一級開發語言後就已經有了很多的討論。
當時學習的必要性還不明確,過了幾個月之後,我們再來看一下學習的必要性。
1.語言層面
通過以上分析,我們可以知道kotlin對於android開發的優勢,同時kotlin也是基於JVM的一門靜態語言,與Java完美兼容,不存在項目遷移等問題。除此之外,學習成本也比較低,很好入門。當然如果想要達到熟練程度,還需繼續練習。
2.形勢層面
國外:Pinterest、Evernote、Uber等企業已經開始應用,Google也在一些小項目中應用kotlin,Google一些專家非常看好Kotlin。
國內:據我所知,美團已經開始使用kotlin。一些大型互聯網公司由於業務導向,開發壓力重,不敢輕易使用kotlin,不過它們已經開始躍躍欲試,着手在新的項目中使用kotlin。
講了這麼多,學習kotlin雖然不是必須的,但是應對趨勢發展,並且學習成本不高,那麼多掌握一門技能,百利而無一害。
Github地址:https://github.com/LRH1993/Eyepetizer-in-Kotlin
喜歡就給個star,希望能對大家學習kotlin有幫助!