Fixed ServiceWorker Initialization Issue #3880
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Fixes #3878
Thanks to @Popolechien for sharing this crash report in #3600 (comment)
ServiceWorker was being initialized every time the
CoreApp
instance was created. When the application crashed,ErrorActivity
was invoked to send a crash report, running in a separate process. In this new process, the ServiceWorker was also being initialized.Upon user interaction (e.g., clicking "No Thanks" to relaunch the app), the application returned to the main process, leading to a second initialization of the ServiceWorker with the same data directory, causing a crash.
Since
ErrorActivity
does not require any WebView-related functionality, it is unnecessary to initialize the ServiceWorker in this process.The fix involves modifying the initialization code to ensure the ServiceWorker is only initialized in the main process of the application.
In this crash report see the lock owner is
error_activity
, and the current process isorg.kiwix.kiwixmobile
.Full logs:
ServiceWorker
in theonCreate
method of theCoreApp
class so that all necessary application setup is complete before the service worker is initialized and provides better control over the initialization sequence.