关于ViewModel的这几个问题,你都知道吗?

前言

作为一名Android开发者,如果你熟悉MVVM架构,熟悉Jetpack组件,那么相信你肯定使用过ViewModel

正如它的名字一样,它是Google推出的一个类,方便我们实现MVVM架构中的ViewModel层。我们在其中处理View层所需的数据,然后在特定条件下通知View层进行UI更新

正如官方所介绍:

ViewModel 类以注重生命周期的方式存储和管理界面相关的数据ViewModel 类让数据可在发生屏幕旋转等配置更改后继续留存

我们抓一下这句话的重点:

  1. 注重生命周期的方式:会在合适的时间进行自我回收,防止出现内存泄漏。
  2. 存储和管理界面相关的数据:符合MVVM架构ViewModel层的理念。
  3. 在发生屏幕旋转等配置更改后继续留存数据:为什么要这么设计?怎么做到的。

接下来,就让我们带着问题,深入学习一下ViewModel类。

使用方法

在阅读源码前,让我们先来简单回顾一下ViewModel的使用方法。

class MainViewModel(private val repository: MainRepo) : ViewModel() {
   

    private val _textMld = MutableLiveData<String>()
    val textLd: LiveData<String> = _textMld

    fun getTextInfo() {
   
        viewModelScope.launch {
   
            withContext(Dispatchers.IO) {
   
                //做异步网络请求工作,获取到textData
                repository.getTextInfo()
            }.apply {
   
                _textMld.postValue(textData)
            }
        }
    }
}

class MainActivity : AppCompatActivity() {
   

    fun setVmFactory(): ViewModelProvider.Factory {
   
        return object : ViewModelProvider.Factory {
   
            override fun <T : ViewModel> create(modelClass: Class<T>): T {
   
                return MainViewModel(MainRepo()) as T
            }
        }
    }

    override fun onCreate(savedInstanceState: Bundle?) {
   
        super.onCreate(savedInstanceState)
        val binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)

        val vm = ViewModelProvider(this, setVmFactory())[MainViewModel::class.java]
        vm.textLd.observe(this, Observer {
    
            binding.textTv.text = it
        })
    }
}

方法步骤可以简单分为两步,分别为:

  1. 继承ViewModel类实现自定义ViewModel,如:MainViewModel。
  2. 通过ViewModelProvider实例化ViewModel

源码

现在,根据上方所介绍的使用方法,我们进一步来看一下ViewModel的源码。

public abstract class ViewModel {
   
    ....

    @SuppressWarnings("WeakerAccess")
    protected void onCleared() {
   
    }

    @MainThread
    final void clear
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值