java .lang.RuntimeException: Невозможно уничтожить действие {MainActivity}: java .util.ConcurrentModificationException - PullRequest
1 голос
/ 03 апреля 2020

Когда я устанавливаю свое приложение в фоновый режим и открываю его снова, у меня появляется cra * sh:

java.lang.RuntimeException: Unable to destroy activity {MainActivity}: java.util.ConcurrentModificationException

Я использую область действия графика навигации для хранения viewmodel

fun <T : ViewModel> getViewModelForGraph(
    graphId: Int,
    clazz: Class<T>,
    fragment: Fragment
): T {
    val navController = NavHostFragment.findNavController(fragment)
    val vmFactory = object : ViewModelProvider.Factory {
        override fun <U : ViewModel?> create(modelClass: Class<U>): U =
            Factory.getComponent(clazz) as U
    }
    return ViewModelProvider(
        navController.getViewModelStoreOwner(graphId),
        vmFactory
    ).get(clazz)
}

и я получаю свою модель представления из фрагмента следующим образом:

getViewModelForGraph(
        R.id.my_sub_graph,
        MyViewModel::class.java,
        this
    )

.getViewModelForGraph (R.id.mySubGraph, MyViewModel :: class. java, this)

И проблема решается когда я getViewModelForGraph и просто присоединяю свою модель представления к activity.

Неправильно ли я использую хранилище модели просмотра navGraph?

full stackTrace

java.lang.RuntimeException: Unable to destroy activity {app/MainActivity}: java.util.ConcurrentModificationException
    at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:4941)
    at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:4970)
    at android.app.servertransaction.DestroyActivityItem.execute(DestroyActivityItem.java:44)
    at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:176)
    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016)
    at android.os.Handler.dispatchMessage(Handler.java:107)
    at android.os.Looper.loop(Looper.java:214)
    at android.app.ActivityThread.main(ActivityThread.java:7356)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
 Caused by: java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.nextNode(HashMap.java:1441)
    at java.util.HashMap$KeyIterator.next(HashMap.java:1465)
    at androidx.navigation.NavControllerViewModel.onCleared(NavControllerViewModel.java:62)
    at androidx.lifecycle.ViewModel.clear(ViewModel.java:139)
    at androidx.lifecycle.ViewModelStore.clear(ViewModelStore.java:62)
    at androidx.fragment.app.FragmentManagerViewModel.clearNonConfigState(FragmentManagerViewModel.java:160)
    at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:1026)
    at androidx.fragment.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManagerImpl.java:1238)
    at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:1303)
    at androidx.fragment.app.FragmentManagerImpl.dispatchStateChange(FragmentManagerImpl.java:2659)
    at androidx.fragment.app.FragmentManagerImpl.dispatchDestroy(FragmentManagerImpl.java:2644)
    at androidx.fragment.app.FragmentController.dispatchDestroy(FragmentController.java:329)
    at androidx.fragment.app.FragmentActivity.onDestroy(FragmentActivity.java:366)
    at androidx.appcompat.app.AppCompatActivity.onDestroy(AppCompatActivity.java:210)
    at android.app.Activity.performDestroy(Activity.java:8048)
    at android.app.Instrumentation.callActivityOnDestroy(Instrumentation.java:1341)
    at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:4926)
    at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:4970) 
    at android.app.servertransaction.DestroyActivityItem.execute(DestroyActivityItem.java:44) 
    at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:176) 
    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016) 
    at android.os.Handler.dispatchMessage(Handler.java:107) 
    at android.os.Looper.loop(Looper.java:214) 
    at android.app.ActivityThread.main(ActivityThread.java:7356) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...