调用 Fragment onStop 时停止计时器
Stop a timer when Fragment onStop is called
我在尝试停止计时器时遇到了问题。此计时器是在 FragmentViewModel 中创建的。
如果我离开该应用程序,计时器将保持 运行。我正在寻找阻止他的方法,但我无法从 Fragments onStop() 函数访问他,因为他是在 ViewModel 中创建的,它仅在 Fragments onCreate() 函数中被引用。有人知道如何解决这个问题吗?
这就是我创建 ViewModel 的方式(里面有计时器):
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val binding: GameFragmentBinding = DataBindingUtil.inflate(
inflater, R.layout.game_fragment, container, false)
val application = requireNotNull(this.activity).application
val dataSource = TranslationDB.getInstance(application).translationDBDao
val viewModelFactory = GameFragmentViewModelFactory(dataSource, application)
val gameFragmentViewModel =
ViewModelProviders.of(
this, viewModelFactory).get(GameFragmentViewModel::class.java)
binding.gameFragmentViewModel = gameFragmentViewModel
提前致谢!
您可以使用 ViewModels onCleared()
回调。
要了解何时调用它(以便您可以决定它是否合适),请查看此问题和答案
如果您想根据生命周期事件在您的视图模型中执行某些操作,请让您的视图模型实现 LifecycleObserver
接口,然后在您的视图模型中执行
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
fun stop() {
// stop timer
}
在你的片段中,在 onCreateView
你做
lifecycle.addObserver(viewmodel)
我在尝试停止计时器时遇到了问题。此计时器是在 FragmentViewModel 中创建的。 如果我离开该应用程序,计时器将保持 运行。我正在寻找阻止他的方法,但我无法从 Fragments onStop() 函数访问他,因为他是在 ViewModel 中创建的,它仅在 Fragments onCreate() 函数中被引用。有人知道如何解决这个问题吗?
这就是我创建 ViewModel 的方式(里面有计时器):
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val binding: GameFragmentBinding = DataBindingUtil.inflate(
inflater, R.layout.game_fragment, container, false)
val application = requireNotNull(this.activity).application
val dataSource = TranslationDB.getInstance(application).translationDBDao
val viewModelFactory = GameFragmentViewModelFactory(dataSource, application)
val gameFragmentViewModel =
ViewModelProviders.of(
this, viewModelFactory).get(GameFragmentViewModel::class.java)
binding.gameFragmentViewModel = gameFragmentViewModel
提前致谢!
您可以使用 ViewModels onCleared()
回调。
要了解何时调用它(以便您可以决定它是否合适),请查看此问题和答案
如果您想根据生命周期事件在您的视图模型中执行某些操作,请让您的视图模型实现 LifecycleObserver
接口,然后在您的视图模型中执行
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
fun stop() {
// stop timer
}
在你的片段中,在 onCreateView
你做
lifecycle.addObserver(viewmodel)