Fixed
Status Update
Comments
su...@google.com <su...@google.com> #2
Project: platform/frameworks/support
Branch: androidx-master-dev
commit 92bd7222fcfd7523e8fa80b7f72e967b8bbf4750
Author: Ian Lake <ilake@google.com>
Date: Tue Aug 27 10:07:52 2019
Split LifecycleCallbacks from FragmentManager
Create a separate FragmentLifecycleCallbacksDispatcher
object that is responsible for dispatching
FragmentLifecycleCallbacks events.
Test: existing FragmentLifecycleTest pass
BUG: 139536619
Change-Id: I64cc2b364af65760b0008efb317a742df2c0718d
A fragment/fragment/src/main/java/androidx/fragment/app/FragmentLifecycleCallbacksDispatcher.java
M fragment/fragment/src/main/java/androidx/fragment/app/FragmentManager.java
https://android-review.googlesource.com/1110155
https://goto.google.com/android-sha1/92bd7222fcfd7523e8fa80b7f72e967b8bbf4750
Branch: androidx-master-dev
commit 92bd7222fcfd7523e8fa80b7f72e967b8bbf4750
Author: Ian Lake <ilake@google.com>
Date: Tue Aug 27 10:07:52 2019
Split LifecycleCallbacks from FragmentManager
Create a separate FragmentLifecycleCallbacksDispatcher
object that is responsible for dispatching
FragmentLifecycleCallbacks events.
Test: existing FragmentLifecycleTest pass
BUG: 139536619
Change-Id: I64cc2b364af65760b0008efb317a742df2c0718d
A fragment/fragment/src/main/java/androidx/fragment/app/FragmentLifecycleCallbacksDispatcher.java
M fragment/fragment/src/main/java/androidx/fragment/app/FragmentManager.java
ap...@google.com <ap...@google.com> #3
Project: platform/frameworks/support
Branch: androidx-master-dev
commit 092d14cd22c174405221b930665869f7c9fc8b65
Author: Ian Lake <ilake@google.com>
Date: Tue Aug 27 14:46:02 2019
Remove FragmentState mInstance
Make FragmentState a simple Parcelable by removing
its mInstance field and its instantiate() method.
This required we change the order of restoring:
instead of reconnecting retained Fragments with their
FragmentState instances, we first iterate through
all FragmentState instances and do one of two things:
1) Reconnect the retained fragment if it exists
2) Create a new fragment from the FragmentState
This allows us to do just one pass through our
FragmentState objects and run the edge case of
detecting retained fragments created after the
state was saved after creating the set of active
fragments.
Test: all existing tests pass
BUG: 139536619
Change-Id: Iba7cc300c127bc05127d122fa5acc1ccc871a76b
M fragment/fragment/src/main/java/androidx/fragment/app/FragmentManager.java
M fragment/fragment/src/main/java/androidx/fragment/app/FragmentManagerViewModel.java
M fragment/fragment/src/main/java/androidx/fragment/app/FragmentState.java
https://android-review.googlesource.com/1108716
https://goto.google.com/android-sha1/092d14cd22c174405221b930665869f7c9fc8b65
Branch: androidx-master-dev
commit 092d14cd22c174405221b930665869f7c9fc8b65
Author: Ian Lake <ilake@google.com>
Date: Tue Aug 27 14:46:02 2019
Remove FragmentState mInstance
Make FragmentState a simple Parcelable by removing
its mInstance field and its instantiate() method.
This required we change the order of restoring:
instead of reconnecting retained Fragments with their
FragmentState instances, we first iterate through
all FragmentState instances and do one of two things:
1) Reconnect the retained fragment if it exists
2) Create a new fragment from the FragmentState
This allows us to do just one pass through our
FragmentState objects and run the edge case of
detecting retained fragments created after the
state was saved after creating the set of active
fragments.
Test: all existing tests pass
BUG: 139536619
Change-Id: Iba7cc300c127bc05127d122fa5acc1ccc871a76b
M fragment/fragment/src/main/java/androidx/fragment/app/FragmentManager.java
M fragment/fragment/src/main/java/androidx/fragment/app/FragmentManagerViewModel.java
M fragment/fragment/src/main/java/androidx/fragment/app/FragmentState.java
ra...@google.com <ra...@google.com>
li...@pinterest.com <li...@pinterest.com> #4
Project: platform/frameworks/support
Branch: androidx-master-dev
commit 66d98b470d8887fdd16461c2da0df69ec62dd8d8
Author: Ian Lake <ilake@google.com>
Date: Fri Aug 16 13:22:20 2019
Add skeleton for FragmentStateManager
Store a HashMap of mWho to FragmentStateManager
instances. This serves as the minimal starting
point for moving logic that interacts with a
single Fragment from FragmentManager into
FragmentStateManager.
Test: existing tests pass, new FragmentStateManagerTest
BUG: 139536619
Change-Id: Ifaea272a3202e918143f65245fb98157ad971827
A fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentStateManagerTest.kt
M fragment/fragment/src/main/java/androidx/fragment/app/BackStackState.java
M fragment/fragment/src/main/java/androidx/fragment/app/Fragment.java
M fragment/fragment/src/main/java/androidx/fragment/app/FragmentManager.java
A fragment/fragment/src/main/java/androidx/fragment/app/FragmentStateManager.java
https://android-review.googlesource.com/1109796
https://goto.google.com/android-sha1/66d98b470d8887fdd16461c2da0df69ec62dd8d8
Branch: androidx-master-dev
commit 66d98b470d8887fdd16461c2da0df69ec62dd8d8
Author: Ian Lake <ilake@google.com>
Date: Fri Aug 16 13:22:20 2019
Add skeleton for FragmentStateManager
Store a HashMap of mWho to FragmentStateManager
instances. This serves as the minimal starting
point for moving logic that interacts with a
single Fragment from FragmentManager into
FragmentStateManager.
Test: existing tests pass, new FragmentStateManagerTest
BUG: 139536619
Change-Id: Ifaea272a3202e918143f65245fb98157ad971827
A fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentStateManagerTest.kt
M fragment/fragment/src/main/java/androidx/fragment/app/BackStackState.java
M fragment/fragment/src/main/java/androidx/fragment/app/Fragment.java
M fragment/fragment/src/main/java/androidx/fragment/app/FragmentManager.java
A fragment/fragment/src/main/java/androidx/fragment/app/FragmentStateManager.java
su...@google.com <su...@google.com> #5
Project: platform/frameworks/support
Branch: androidx-master-dev
commit 92d322f39a3436da8ce0e59f55194c70abe1fb8e
Author: Ian Lake <ilake@google.com>
Date: Tue Aug 27 16:46:05 2019
Move saving/restore Fragment state to FragmentStateManager
Separate the saving and restoring of Fragment
instances from FragmentManager, allowing
FragmentStateManager to fully manage the
restoration of Fragments.
Test: new FragmentStateManagerTest, existing tests
BUG: 139536619
Change-Id: Iba0df8f617d7805995612eaad52e26f5f2e99707
M fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentStateManagerTest.kt
M fragment/fragment/src/main/java/androidx/fragment/app/FragmentManager.java
M fragment/fragment/src/main/java/androidx/fragment/app/FragmentStateManager.java
https://android-review.googlesource.com/1109797
https://goto.google.com/android-sha1/92d322f39a3436da8ce0e59f55194c70abe1fb8e
Branch: androidx-master-dev
commit 92d322f39a3436da8ce0e59f55194c70abe1fb8e
Author: Ian Lake <ilake@google.com>
Date: Tue Aug 27 16:46:05 2019
Move saving/restore Fragment state to FragmentStateManager
Separate the saving and restoring of Fragment
instances from FragmentManager, allowing
FragmentStateManager to fully manage the
restoration of Fragments.
Test: new FragmentStateManagerTest, existing tests
BUG: 139536619
Change-Id: Iba0df8f617d7805995612eaad52e26f5f2e99707
M fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentStateManagerTest.kt
M fragment/fragment/src/main/java/androidx/fragment/app/FragmentManager.java
M fragment/fragment/src/main/java/androidx/fragment/app/FragmentStateManager.java
li...@pinterest.com <li...@pinterest.com> #6
Project: platform/frameworks/support
Branch: androidx-master-dev
commit 5318d9bfea4baae7190875673fd087b9526c30c5
Author: Ian Lake <ilake@google.com>
Date: Wed Sep 04 13:40:58 2019
Move ensureInflatedFragmentView to FragmentStateManager
Move this logic into FragmentStateManager.
Test: all existing tests pass
BUG: 139536619
Change-Id: I1f8fafba5e35fda592bbe13954eed2ff355aae55
M fragment/fragment/src/main/java/androidx/fragment/app/FragmentManager.java
M fragment/fragment/src/main/java/androidx/fragment/app/FragmentStateManager.java
https://android-review.googlesource.com/1113752
https://goto.google.com/android-sha1/5318d9bfea4baae7190875673fd087b9526c30c5
Branch: androidx-master-dev
commit 5318d9bfea4baae7190875673fd087b9526c30c5
Author: Ian Lake <ilake@google.com>
Date: Wed Sep 04 13:40:58 2019
Move ensureInflatedFragmentView to FragmentStateManager
Move this logic into FragmentStateManager.
Test: all existing tests pass
BUG: 139536619
Change-Id: I1f8fafba5e35fda592bbe13954eed2ff355aae55
M fragment/fragment/src/main/java/androidx/fragment/app/FragmentManager.java
M fragment/fragment/src/main/java/androidx/fragment/app/FragmentStateManager.java
cr...@gmail.com <cr...@gmail.com> #7
Project: platform/frameworks/support
Branch: androidx-master-dev
commit 61497f97f85997ed8bf4dd58d6e513e810784f1e
Author: Ian Lake <ilake@google.com>
Date: Fri Sep 20 14:23:27 2019
Have FragmentStateManager compute the Fragment's max state
Move logic restricting the Fragment to a particular
state into FragmentStateManager.
Test: all existing tests pass
BUG: 139536619
Change-Id: Ief8528ed9990da515f0765199f64f4ca04bd2494
M fragment/fragment/src/main/java/androidx/fragment/app/FragmentManager.java
M fragment/fragment/src/main/java/androidx/fragment/app/FragmentStateManager.java
https://android-review.googlesource.com/1126844
https://goto.google.com/android-sha1/61497f97f85997ed8bf4dd58d6e513e810784f1e
Branch: androidx-master-dev
commit 61497f97f85997ed8bf4dd58d6e513e810784f1e
Author: Ian Lake <ilake@google.com>
Date: Fri Sep 20 14:23:27 2019
Have FragmentStateManager compute the Fragment's max state
Move logic restricting the Fragment to a particular
state into FragmentStateManager.
Test: all existing tests pass
BUG: 139536619
Change-Id: Ief8528ed9990da515f0765199f64f4ca04bd2494
M fragment/fragment/src/main/java/androidx/fragment/app/FragmentManager.java
M fragment/fragment/src/main/java/androidx/fragment/app/FragmentStateManager.java
Description
Version used: 1.0.0-beta05
Devices/Android versions reproduced on: all devices
The context of this ticket is to support initializing WorkManager a bit later after the application cold start in order to keep cold start fast. I am aware that:
1. WorkManager has this auto-initialization support through the WorkManagerInitializer provider.
2. It can be disabled and replaced by a custom provider to call WorkManager.initialize() directly or call it from Application.onCreate().
3. A number of services and receivers are registered by WorkManager and they rely on the early initialization of the WorkManager.
During testing, I realized the WorkManager.initialize() spends non-trivial time, it could be 50ms on some low end devices. So I want to avoid that delay during the cold start and have an option to initialize WorkManager a bit later. The request is to add code into the receivers and services to initialize WorkManager by themselves if WorkManager has not been initialized. This will help to cover the time from the application startup to the time that the application initialize the WorkManager manually.
Currently, a crash will happen in those receivers and services if they are triggered before the WorkManager is initialized in the application.
03-04 22:35:15.552 5784-5784/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.pinterest, PID: 5784
java.lang.RuntimeException: Unable to create service androidx.work.impl.background.systemjob.SystemJobService: java.lang.IllegalStateException: WorkManager needs to be initialized via a ContentProvider#onCreate() or an Application#onCreate().
at android.app.ActivityThread.handleCreateService(ActivityThread.java:3172)
at android.app.ActivityThread.-wrap5(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1550)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6077)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)
Caused by: java.lang.IllegalStateException: WorkManager needs to be initialized via a ContentProvider#onCreate() or an Application#onCreate().
at androidx.work.impl.background.systemjob.SystemJobService.onCreate(SystemJobService.java:68)
at android.app.ActivityThread.handleCreateService(ActivityThread.java:3162)
at android.app.ActivityThread.-wrap5(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1550)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6077)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)