Eyepetizer-in-Kotlin:一款簡約的小視頻app,帶你走進kotlin

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有幫助!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章