Android databingding与jetpack的lifecycle使用与比较

1.开发环境Android studio 3.4.0,kotlin
2.databinding用法
3.jetpack lifecycles的LiveData 和 ViewModel用法
测试效果如下:可以看到在onResume执行之前不会更新视图,在onStop之后也不会更新视图
Android databingding与jetpack的lifecycle使用与比较_第1张图片
①添加依赖

 // ViewModel and LiveData
    implementation "android.arch.lifecycle:extensions:1.1.0"

②创建一个DevInfoVM继承ViewModel

import android.os.Handler
import android.os.Looper
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import com.zjhj.maxapp.bean.DevInfo
import com.zjhj.maxapp.http.Urls
import com.zjhj.maxapp.http.base.BaseRequest
import com.zjhj.maxapp.http.base.IBaseCallView
import com.zjhj.maxapp.utils.L
import java.util.*
import java.util.TimerTask


/**
 * ViewModel层绑定绑定view
 *
 */
class DevInfoVM : ViewModel(), IBaseCallView {
    val handler = Handler(Looper.getMainLooper())
    val req: BaseRequest = BaseRequest(this)
    val liveData = MutableLiveData()

    fun getDev(): LiveData {
        loadDevInfo()
        return liveData
    }

    fun getData(res : String){
        L.d("$res 加载数据,返回null")
        liveData.postValue(null)
    }

    fun getMoreData() {
        L.d("加载更多,返回数据...")
        liveData.postValue(null)
    }

    private fun loadDevInfo() {//请求设备数据
        L.d("请求数据开始..")
        req.getData(url = Urls.getDevEvInfo, reqType = 111)
    }

    override fun loadStart(msg: String, reqType: Int) {

    }

    override fun loadSuccessData(content: String?, isLoadMore: Boolean, reqType: Int) {
        val info: MutableList? = req.getResultList(content, DevInfo::class.java)
        if (info != null)
            liveData.postValue(info.get(0))
        Timer().schedule(object : TimerTask(){
            override fun run() {
                L.d("执行延时操作 10秒")
                liveData.postValue(null)
            }
        },10000)
    }

    override fun loadErr(message: String, reqType: Int) {

    }
}

③在Activity中绑定代码块

...
 lateinit var model: DevInfoVM

    override fun setContentView() {
        //获取ViewModel
        model = ViewModelProviders.of(this).get(DevInfoVM::class.java)
        //绑定生命周期
        model.getDev().observe(this, Observer { devInfo ->
            // update UI1
            L.d("更新视图:" + devInfo?.values?.mainCompany)
            toolBar.title = devInfo?.values?.mainCompany
        })
        setContentView(R.layout.activity_main)
        setSupportActionBar(toolBar)
        model.getData("setContentView");
    }

    override fun onStart() {
        super.onStart()
        L.d("onStart")
        model.getData("onStart")
    }

    override fun onRestart() {
        super.onRestart()
        L.d("onRestart")
    }

    override fun onResume() {
        super.onResume()
        L.d("onResume")
        model.getData("onResume")
    }

    override fun onStop() {
        super.onStop()
        L.d("onStop")
        model.getData("onResume")
    }
...
  1. 比较databingding与jetpack的lifecycle

你可能感兴趣的:(Android基础)