Status Update
Comments
su...@google.com <su...@google.com>
ap...@google.com <ap...@google.com> #2
The code referred to can be found in
override fun onResume() {
super.onResume()
if (navigated) {
findNavController().popBackStack()
return
}
var monitor = installViewModel.installMonitor
if (monitor == null) {
Log.i(TAG, "onResume: monitor is null, navigating")
navigate()
monitor = installViewModel.installMonitor
}
if (monitor != null) {
Log.i(TAG, "onResume: monitor is now not null, observing")
monitor.status.observe(this, StateObserver(monitor))
}
}
In case no monitor is attached during onResume
, we assign the installMonitor
from installViewModel
.
In either case a new StateObserver
is attached, which then observes status changes.
Once SplitSessionInstallState.INSTALLED
is observed, navigate()
is invoked from within StateObserver
.
Since navigate
is called in the StateObserver we might see multiple invocations by accident.
To alleviate this, we could create a Event
Alternatively, moving the calls from onResume
earlier in the lifecycle, e.g. onCreateView
could avoid unnecessary view creation in case navigation already has taken place, and could avoid multiple calls to the observed status.
Description
Version used: 1.0.0-beta02
Devices/Android versions reproduced on: Nexus 5X API 28 Emulator (28.1.3-5243232) and Samsung J5 phone with 8.1.0
Steps to reproduce:
- Run application, monitoring logcat
- Press Enqueue
- Toast will be displayed and the log should indicate the worker started, failed and requested a retry
- Monitor the logcat for a few minutes and observe that no worker has been retried
This is intermittent but happens 90% of the time. If the Worker does retry, hit Enqueue again and it will likely fail to retry the new worker.
Expected Behaviour:
The worker should be retried after 10 seconds and up to 5 times in total before failing.