我的应用程序在某些用户的设备上崩溃,但以下情况除外。
Fatal Exception: java.lang.IllegalArgumentException: SavedStateProvider with the given key is already registered
at androidx.savedstate.SavedStateRegistry.registerSavedStateProvider(SavedStateRegistry.java:2)
at androidx.lifecycle.SavedStateHandleController.attachToLifecycle(SavedStateHandleController.java:2)
at androidx.lifecycle.SavedStateHandleController.create(SavedStateHandleController.java:1)
at androidx.lifecycle.AbstractSavedStateViewModelFactory.create(AbstractSavedStateViewModelFactory.java:1)
at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:5)
at androidx.lifecycle.ViewModelLazy.getValue(ViewModelLazy.java:5)
at androidx.lifecycle.ViewModelLazy.getValue(ViewModelLazy.java:5)
at com.emptysheet.pdfreader_autoscroll.homeScreen.MainActivity.getViewModel(MainActivity.java:3)
at com.emptysheet.pdfreader_autoscroll.homeScreen.MainActivity$scanDeviceForFiles$1$1.invokeSuspend(MainActivity.java:3)
at kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull(Intrinsics.java)
at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.java:4)
at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.java)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.java:7)
在我的设备上一切正常。我在自己的测试设备和模拟器上都没有遇到这个异常。另外,我在我的应用程序中使用 Hilt。
这是我的ViewModel课。
class MainActivityViewModel @ViewModelInject constructor(
private val pdfItemRepository: PdfItemRepository
) : ViewModel() {
}
这是activity我使用它的地方ViewModel。
@AndroidEntryPoint
class MainActivity : AppCompatActivity() {
private val viewModel:MainActivityViewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
val view = binding.root
setContentView(view)
}
我没有MainActivityViewModel在其他任何地方使用它,除了MainActivity. 所以没有共享ViewModel。此外,旋转关闭 on MainActivity。所以没有旋转变化。
我从下面的错误中了解到,我的活动以某种方式试图创建另一个 ViewModel 而不是保留前一个?如果我错了,请纠正我。我无法理解SavedStateRegistry.registerSavedStateProvider()再次触发什么样的场景。
注意 -我在 ViewModel 类和活动中省略了方法以增加可读性。