我可以在伴随对象中共享 ViewModel 吗?

Can I share ViewModel inside companion object?

我在 Android 上遇到 MVVM 问题。我想在两个活动之间共享数据。在其中一个中,我创建了 ViewModel (MainActivity),然后在伴随对象中将 ViewModel 共享给另一个 activity (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)

        }

    }
}    

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

Is it safe?

我相当有信心它违背了 ViewModel 的开发者的想法。特别要记住,ViewModel 在其 LifecycleOwner 被销毁时被清除,因此您可能 运行 遇到共享 ViewModel 对象在您希望的时候被清除的问题他们不是。

就我个人而言,我不会使用这种方法。

Is exists another recommended way?

这是三个:

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

  • 通过 Intent extras 在活动之间传递数据。

  • 让公共数据由存储库管理,通过 Intent 附加功能在活动之间传递标识符以在存储库中查找该数据。