Мое приложение дает сбой на устройствах некоторых пользователей, за исключением ниже.
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 не распространяется. Также на MainActivity
вращение отключено. Таким образом, вращения нет.
Из приведенной ниже ошибки я понял, что каким-то образом мое действие пытается создать другую ViewModel вместо сохранения предыдущей ?. Пожалуйста, поправьте меня, если я ошибаюсь. Я не могу понять, какой сценарий ios снова запускает SavedStateRegistry.registerSavedStateProvider()
.
Примечание - Я пропустил методы в моем классе ViewModel и действиях для повышения читабельности.