Clean-multimodel-arch icon indicating copy to clipboard operation
Clean-multimodel-arch copied to clipboard

Проблема с инициализацией фичи после того как система убивает приложение

Open pavel163 opened this issue 3 years ago • 4 comments

Пробовал ваше решение и столкнулся с такой проблемой:

  1. открываю экран фичи
  2. сворачиваю приложение
  3. Система убивает процесс
  4. Открываю приложение и получаю креш, с текстом что компонент фичи не создан

На вашем примере это тоже воспроизводится. Вот стектрейс. 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) 

Есть идеи по решению данной проблемы? Мы в итоге пришли к своему решению

pavel163 avatar Feb 17 '21 14:02 pavel163

@pavel163 как вы в результате решили данную проблему у себя?

docentTSR avatar Apr 05 '21 19:04 docentTSR

Идея такая что, если нет компоненты фичи FeatureComponet, то идем и ищем для нее фабрику. Эта фабрика может в виде зависимости принимать другую компоненту например SomeComponent. Поэтому при создание фабрики для FeatureComponet мы проверяем также, есть ли эта SomeComponent, если ее нет идем и достаем для нее фабрику. Ну а если SomeComponent зависит от SingletonComponent, то фабрика для нее будет, так SingletonComponent создается на старте Application.

Фабрики и компоненты можно хранить в синглетоне в Map<Class, Component>

pavel163 avatar Apr 05 '21 20:04 pavel163

Тоже столкнулся с этой проблемой, когда стал применять этот подход у себя. Что-то пока не могу придумать как его красиво решить, @pavel163 может поделитесь более детально своим подходом? @phansier можете также что-то посоветовать по поводу этой проблемы?

nestoleh avatar Apr 27 '21 12:04 nestoleh

@pavel163 @nestoleh @phansier Решили ли как-то данную проблему ?

mdgarri avatar Dec 16 '21 11:12 mdgarri