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

Ruheng發表於2017-07-12

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地址:github.com/LRH1993/Eye…

喜歡就給個star,希望能對大家學習kotlin有幫助!

相關文章