Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Random NoBeanDefFoundException crash which works almost every time otherwise #884

Closed
babramovitch opened this issue Aug 27, 2020 · 7 comments

Comments

@babramovitch
Copy link

babramovitch commented Aug 27, 2020

I am getting crashes from Koin for objects that work nearly every time. It's crashing maybe once every 300,000 sessions pretty rare but looks like it happened more times over the weekend which makes that original number way off if it holds up...

They all seem to be happening in KoinComponents with the exception of it also happening in the FirebaseMessagingService which I realize did not need to be one, but currently does extend it (i'll remove and test but will take weeks or longer to deploy and then see if it happens). It's happening while the app is in use in the foreground managing UI, and also in the background.

It's happening when using by inject and get

I'm not really sure what to do about it. It was happening in 2.0.1 and then I tried upgrading to 2.1.5 and it's still happening.

Seen on Android 8, 8.1, 9 but it's so infrequent it could maybe be anything?

Caused by org.koin.core.error.NoBeanDefFoundException
No definition found for class:{myclass}'. Check your definitions!
org.koin.core.scope.Scope.throwDefinitionNotFound (Scope.kt:247)
org.koin.core.scope.Scope.resolveInstance (Scope.kt:216)
org.koin.core.scope.Scope.get (Scope.kt:181)
Caused by org.koin.core.error.NoBeanDefFoundException
No definition found for class:<myclass>'. Check your definitions!
org.koin.core.scope.Scope.throwDefinitionNotFound (Scope.kt:247)
org.koin.core.scope.Scope.resolveInstance (Scope.kt:216)
org.koin.core.scope.Scope.get (Scope.kt:181)
<myclass>$handleFcmMessage$$inlined$inject$1.invoke (ComponentCallbackExt.kt:51)
kotlin.UnsafeLazyImpl.getValue (Lazy.kt:81)
Caused by org.koin.core.error.NoBeanDefFoundException
No definition found for class:'<myclass>'. Check your definitions!
org.koin.core.scope.Scope.throwDefinitionNotFound (Scope.kt:247)
org.koin.core.scope.Scope.resolveInstance (Scope.kt:216)
org.koin.core.scope.Scope.get (Scope.kt:181)
<mypackage>.koin.KoinRowBindingsKt$rowBindingsModule$1$7.invoke (KoinRowBindings.kt:121)
<mypackage>.koin.KoinRowBindingsKt$rowBindingsModule$1$7.invoke (Unknown Source:4)
org.koin.core.instance.InstanceFactory.create (InstanceFactory.kt:50)
org.koin.core.instance.FactoryInstanceFactory.get (FactoryInstanceFactory.kt:36)
org.koin.core.registry.InstanceRegistry.resolveInstance$koin_core (InstanceRegistry.kt:87)
org.koin.core.scope.Scope.resolveInstance (Scope.kt:214)
org.koin.core.scope.Scope.get (Scope.kt:181)
@babramovitch babramovitch changed the title Random Koin not found crash which works almost every time otherwise Random NoBeanDefFoundException crash which works almost every time otherwise Aug 31, 2020
@arnaudgiuliani
Copy link
Member

Could be your app loosing the Koin context?

@babramovitch
Copy link
Author

How would something like that happen?

@rewgoes
Copy link

rewgoes commented Jan 28, 2021

I have also experienced that with Koin 2.2.1.

By the looks of it, it happened right after the app was opened after being in the background for a long time. Probably the process was killed or something.

For that reason, I might think that it might be related to some race condition that Koin was not ready to provide all the definitions. But I'm not sure.

@arnaudgiuliani, how can I check if the app has the Koin context and how to prevent the app from loosing it?

All I can say is that the module of the bean that was not found, SearchRequestJsonAdapter, has nothing to do with androidx.camera.core.CameraControl.

So I don't have any idea of what was going on here

Start Date: 2021-01-28T04:16:25.194Z
Date: 2021-01-28T08:27:45.183Z

java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:523)
  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1055)
  Caused by: java.lang.reflect.InvocationTargetException
    at java.lang.reflect.Method.invoke(Method.java:-2)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1055)
    Caused by: androidx.camera.core.CameraControl$OperationCanceledException: Could not create instance for [Factory:'o.cA']
      at org.koin.core.instance.InstanceFactory.create$14a74443(InstanceFactory.java:62)
      at org.koin.core.instance.FactoryInstanceFactory.get$14a74443(FactoryInstanceFactory.java:36)
      at org.koin.core.registry.InstanceRegistry.resolveInstance$koin_core(InstanceRegistry.java:103)
      at org.koin.core.scope.Scope.resolveInstance(Scope.java:236)
      at org.koin.core.scope.Scope.get(Scope.java:204)
      at org.koin.androidx.viewmodel.factory.StateViewModelFactory.create(StateViewModelFactory.java:21)
      at androidx.lifecycle.AbstractSavedStateViewModelFactory.create(AbstractSavedStateViewModelFactory.java:69)
      at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:185)
      at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:150)
      at org.koin.androidx.viewmodel.ViewModelResolverKt.get(ViewModelResolverKt.java:23)
      at org.koin.androidx.viewmodel.ViewModelResolverKt.resolveInstance(ViewModelResolverKt.java:12)
      at org.koin.androidx.viewmodel.scope.ScopeExtKt.getViewModel(ScopeExtKt.java:86)
      at org.koin.androidx.viewmodel.scope.ScopeExtKt.getViewModel(ScopeExtKt.java:604)
      at org.koin.androidx.viewmodel.koin.KoinExtKt.getViewModel(KoinExtKt.java:41)
      at org.koin.androidx.viewmodel.ext.android.FragmentExtKt.getViewModel(FragmentExtKt.java:71)
      at {my.package}.mobile.ui.dialog.{Class}$$special$$inlined$viewModel$2.invoke({Class}.java:1073)
      at {my.package}.mobile.ui.dialog.{Class}$$special$$inlined$viewModel$2.invoke({Class}.java:73)
      at {my.package}.mobile.ui.dialog.{Class}$$special$$inlined$viewModel$2.invoke({Class}.java)
      at kotlin.UnsafeLazyImpl.getValue(UnsafeLazyImpl.java:81)
      at {my.package}.mobile.ui.dialog.{Class}.getViewModel({Class}.java)
      at {my.package}.mobile.ui.dialog.{Class}.onCreateView({Class}.java:36)
      at androidx.fragment.app.Fragment.onHiddenChanged(Fragment.java:2699)
      at androidx.fragment.app.Fragment.onPrepareOptionsMenu(Fragment.java:2699)
      at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2699)
      at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:320)
      at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1199)
      at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1368)
      at androidx.fragment.app.FragmentManager.moveFragmentToExpectedState(FragmentManager.java:1446)
      at androidx.fragment.app.FragmentManager.reverseTransit(FragmentManager.java:1509)
      at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1509)
      at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:447)
      at androidx.fragment.app.FragmentManager.executeOps(FragmentManager.java:2181)
      at androidx.fragment.app.FragmentManager.reverseTransit(FragmentManager.java:2181)
      at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:2004)
      at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1959)
      at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1861)
      at androidx.fragment.app.FragmentManager$4.run(FragmentManager.java:413)
      at android.os.Handler.handleCallback(Handler.java:900)
      at android.os.Handler.dispatchMessage(Handler.java:103)
      at android.os.Looper.loop(Looper.java:219)
      at android.app.ActivityThread.main(ActivityThread.java:8347)
      at java.lang.reflect.Method.invoke(Method.java:-2)
      at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513)
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1055)
      Caused by: org.koin.core.error.NoBeanDefFoundException: No definition found for class:'o.SearchRequestJsonAdapter'. Check your definitions!
        at org.koin.core.scope.Scope.throwDefinitionNotFound(Scope.java:282)
        at org.koin.core.scope.Scope.resolveInstance(Scope.java:251)
        at org.koin.core.scope.Scope.get(Scope.java:204)
        at {my.package}.mobile.di.features.ViewModelModuleKt$viewModelModule$1$14.invoke(ViewModelModuleKt.java:1260)
        at {my.package}.mobile.di.features.ViewModelModuleKt$viewModelModule$1$14.invoke(ViewModelModuleKt.java:260)
        at {my.package}.mobile.di.features.ViewModelModuleKt$viewModelModule$1$14.invoke(ViewModelModuleKt.java)
        at org.koin.core.instance.InstanceFactory.create$14a74443(InstanceFactory.java:53)
        at org.koin.core.instance.FactoryInstanceFactory.get$14a74443(FactoryInstanceFactory.java:36)
        at org.koin.core.registry.InstanceRegistry.resolveInstance$koin_core(InstanceRegistry.java:103)
        at org.koin.core.scope.Scope.resolveInstance(Scope.java:236)
        at org.koin.core.scope.Scope.get(Scope.java:204)
        at org.koin.androidx.viewmodel.factory.StateViewModelFactory.create(StateViewModelFactory.java:21)
        at androidx.lifecycle.AbstractSavedStateViewModelFactory.create(AbstractSavedStateViewModelFactory.java:69)
        at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:185)
        at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:150)
        at org.koin.androidx.viewmodel.ViewModelResolverKt.get(ViewModelResolverKt.java:23)
        at org.koin.androidx.viewmodel.ViewModelResolverKt.resolveInstance(ViewModelResolverKt.java:12)
        at org.koin.androidx.viewmodel.scope.ScopeExtKt.getViewModel(ScopeExtKt.java:86)
        at org.koin.androidx.viewmodel.scope.ScopeExtKt.getViewModel(ScopeExtKt.java:604)
        at org.koin.androidx.viewmodel.koin.KoinExtKt.getViewModel(KoinExtKt.java:41)
        at org.koin.androidx.viewmodel.ext.android.FragmentExtKt.getViewModel(FragmentExtKt.java:71)
        at {my.package}.mobile.ui.dialog.{Class}$$special$$inlined$viewModel$2.invoke({Class}.java:1073)
        at {my.package}.mobile.ui.dialog.{Class}$$special$$inlined$viewModel$2.invoke({Class}.java:73)
        at {my.package}.mobile.ui.dialog.{Class}$$special$$inlined$viewModel$2.invoke({Class}.java)
        at kotlin.UnsafeLazyImpl.getValue(UnsafeLazyImpl.java:81)
        at {my.package}.mobile.ui.dialog.{Class}.getViewModel({Class}.java)
        at {my.package}.mobile.ui.dialog.{Class}.onCreateView({Class}.java:36)
        at androidx.fragment.app.Fragment.onHiddenChanged(Fragment.java:2699)
        at androidx.fragment.app.Fragment.onPrepareOptionsMenu(Fragment.java:2699)
        at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2699)
        at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:320)
        at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1199)
        at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1368)
        at androidx.fragment.app.FragmentManager.moveFragmentToExpectedState(FragmentManager.java:1446)
        at androidx.fragment.app.FragmentManager.reverseTransit(FragmentManager.java:1509)
        at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1509)
        at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:447)
        at androidx.fragment.app.FragmentManager.executeOps(FragmentManager.java:2181)
        at androidx.fragment.app.FragmentManager.reverseTransit(FragmentManager.java:2181)
        at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:2004)
        at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1959)
        at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1861)
        at androidx.fragment.app.FragmentManager$4.run(FragmentManager.java:413)
        at android.os.Handler.handleCallback(Handler.java:900)
        at android.os.Handler.dispatchMessage(Handler.java:103)
        at android.os.Looper.loop(Looper.java:219)
        at android.app.ActivityThread.main(ActivityThread.java:8347)
        at java.lang.reflect.Method.invoke(Method.java:-2)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1055)

@Raghuramchowdary-tech
Copy link

Any update on this

@scottfennell
Copy link

We have been seeing this happen in our test suites quite frequently (lots of app starts) and a small amount in production - it seems to occur frequently in calls to getAll() more frequently than not and this also seems to correspond to classes created while being executed from WorkManager on a separate thread.

@babramovitch
Copy link
Author

babramovitch commented Sep 20, 2021

Since posting this original issue, I've removed Koin from instantiating anything that loads on a thread (services, jobs etc). It's dramatically reduced the frequency of it happening, but I still get it on occasion when used elsewhere in the app on the main thread. The remaining crashes all seem to happen outside of onCreate so I'm thinking of removing all of those as well now, which is probably a reasonable practice anyway.

@stale
Copy link

stale bot commented Mar 23, 2022

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.

@stale stale bot added the status:wontfix label Mar 23, 2022
@stale stale bot closed this as completed Mar 31, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

5 participants