使用Kotlin 重写毕设项目——校园贴吧

1,176 阅读1分钟

      Kotlin目前已经转正,成为 Android 开发一级语言,前段时间不忙,将毕业设计用Kotlin 进行重写。

     原项目开发背景           :blog.csdn.net/qq_29375837…

     毕业设计 Java 版源码  :github.com/stevenwsg/X…

     毕业设计Kotlin 版源码:github.com/stevenwsg/X…



下面罗列一下项目中的重点:

1、使用RxJava 和 扩展函数 代替 Handler 实现消息转发 :

//BaseActivity

open class BaseActivity : AppCompatActivity(){


    ........................

    //处理异步消息
    open fun msgManagement(message: Int){

    }
}

//扩展函数

//使用rxjava 代替Handler 立刻发送消息
fun BaseActivity.sendMessage(m : Int){
    Observable
        .empty<Any>()
        .observeOn(AndroidSchedulers.mainThread())
        .doOnComplete({ msgManagement(m) })
        .subscribe()
}
//使用rxjava 代替Handler 延迟发送消息
fun BaseActivity.sendMessageDelayed(m :Int ,d : Long){
    Observable
        .timer(d, TimeUnit.MILLISECONDS)
        .observeOn(AndroidSchedulers.mainThread())
        .doOnComplete { msgManagement(m) }
        .subscribe()
}

2、使用Kotlin Anko 协程  实现后台线程和主线程之前的转换:

        doAsync {
                    ...................
                    // 这部分执行在后台线程
                    uiThread {
                    ...................
                    //这部分执行在UI线程
                    }
                }
            })
        }

3、使用kotlin android extensions省略findViewById()模板代码:

import kotlinx.android.synthetic.main.activity_feedback.*

class FeedBackActivity : BaseActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_feedback)
        bt_back.setOnClickListener { saveFeed() }
    }


    ......
}

4、Toast 扩展函数,后来发现Anko库里面提供Toast 扩展

fun BaseActivity.toast(s : String){
    Toast.makeText(applicationContext,s,Toast.LENGTH_SHORT).show()
}

fun BaseFragment.toast(s : String){
    Toast.makeText(activity!!.applicationContext,s,Toast.LENGTH_SHORT).show()
}



总的来说: 

1、kotlin 刚开始熟悉的时候还是有一些别扭的地方,比如,延迟初始化的属性判空前必须先判断是否进行初始化,这对 Java 程序员来说还是需要适应的。 

2、Kotlin 能大大减少模板代码,不管是实体类还是各种监听事件,写起来非常舒服。 

3、JetBrains 开源的 Kotlin Anko 封装了一系列 日常操作,写起来非常简约。


项目是一个中等大小的项目,大家感兴趣的话,可以看看源码:

源码:github.com/stevenwsg/X…