Проблема с инициализацией фичи после того как система убивает приложение
pavel163 opened this issue · 4 comments
Пробовал ваше решение и столкнулся с такой проблемой:
- открываю экран фичи
- сворачиваю приложение
- Система убивает процесс
- Открываю приложение и получаю креш, с текстом что компонент фичи не создан
На вашем примере это тоже воспроизводится. Вот стектрейс.
Process: com.example.eugene_matsyuk.dagger_arch, PID: 21048 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.eugene_matsyuk.dagger_arch/com.example.antitheft_impl.presentation.view.AntitheftActivity}: java.lang.IllegalStateException: AntitheftFeatureComponent was not initialized! at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3270) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 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.lang.IllegalStateException: AntitheftFeatureComponent was not initialized! at com.example.antitheft_impl.di.AntitheftFeatureComponentHolder.getComponent$feature_antitheft_debug(AntitheftFeatureComponentHolder.kt:25) at com.example.antitheft_impl.presentation.view.AntitheftActivity.onCreate(AntitheftActivity.kt:23) at android.app.Activity.performCreate(Activity.java:7802) at android.app.Activity.performCreate(Activity.java:7791) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1299) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3245) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 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)
Есть идеи по решению данной проблемы?
Мы в итоге пришли к своему решению
Идея такая что, если нет компоненты фичи FeatureComponet, то идем и ищем для нее фабрику. Эта фабрика может в виде зависимости принимать другую компоненту например SomeComponent. Поэтому при создание фабрики для FeatureComponet мы проверяем также, есть ли эта SomeComponent, если ее нет идем и достаем для нее фабрику. Ну а если SomeComponent зависит от SingletonComponent, то фабрика для нее будет, так SingletonComponent создается на старте Application.
Фабрики и компоненты можно хранить в синглетоне в Map<Class, Component>