我可以在同伴对象内共享ViewModel吗?

时间:2019-07-16 18:13:09

标签: android kotlin mvvm viewmodel

我在Android上的MVVM有问题。我想在两个活动之间共享数据。在其中一个中,我创建了ViewModel(MainActivity),然后在同一个对象中将ViewModel共享到另一个活动(SecondActivity)。安全吗?是否存在另一种推荐方法?

感谢您的帮助和解释

    class SecondActivity : AppCompatActivity() {    

    lateinit var viewModelTwo: ViewModelForActivities

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_second)

    }


    override fun onStart() {
        super.onStart()
        viewModelTwo = MainActivity.viewModel
        textViewTwo.setText(viewModelTwo.licznik.toString())

    }
}

class MainActivity : AppCompatActivity() {

    companion object{
        lateinit var viewModel: ViewModelForActivities
    }


    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        viewModel = ViewModelProviders.of(this).get(ViewModelForActivities::class.java)

        textViewOne.setOnClickListener {
            val intent = Intent(applicationContext, SecondActivity::class.java)
            viewModel.licznik++
            startActivity(intent)

        }

    }
}    

该应用程序可以正常运行,但我担心安全性。这是正确的方法吗?

1 个答案:

答案 0 :(得分:0)

  

安全吗?

我非常有信心与ViewModel开发人员的想法背道而驰。特别要记住,ViewModel被销毁时LifecycleOwner被清除,因此您可能会遇到共享ViewModel对象被清除而又不想清除它们的问题。

我个人不会使用这种方法。

  

是否存在另一种推荐方法?

这里是三个:

  • 具有一个活动和两个片段,两个片段之间共享ViewModel。在片段之间共享ViewModel只是使用ViewModelProviders.of(requireActivity())而不是ViewModelProviders.of(this)的问题。或者,如果您正在使用导航组件,则可以使用范围为特定导航图的ViewModel

  • 通过Intent附加功能在活动之间传递数据。

  • 已使公共数据由存储库管理,并通过Intent Extra在活动之间传递标识符以在存储库中查找该数据。