什么情况下“无法从onDestroy访问ViewModels”以及如何正常解决呢?

Tee*_*ker 5 android android-architecture-components

一些错误,例如

   java.lang.RuntimeException: Unable to destroy activity {xxxxxx}:
   java.lang.IllegalStateException: Can't access ViewModels from
   onDestroy
Run Code Online (Sandbox Code Playgroud)

pum*_*nao 0

查看 Android 源代码,它会检查在尝试获取 ViewModel 时支持的 FragmentManager 是否被破坏。

呼唤

ViewModelProviders.of(this).get(ViewModel::class.java)
Run Code Online (Sandbox Code Playgroud)

将到达

private static HolderFragment findHolderFragment(FragmentManager manager) {
    if (manager.isDestroyed()) {
        throw new IllegalStateException("Can't access ViewModels from onDestroy");
    }
Run Code Online (Sandbox Code Playgroud)

如果 FragmentManager 被销毁,将会抛出异常。当 get ViewModel 代码在应用程序生命周期中执行时要小心。

要解决这个问题,您可以:

  • 在使用 ViewModel 之前检查 getSupportFragmentManager().isDestroyed()
  • 如果不影响正常流程,则用 try catch 包围并忽略