Repository navigation
Build the conversation list addresses off the main thread - #2246
Draft
mpretty-cyro wants to merge 2 commits into
Draft
mpretty-cyro wants to merge 2 commits into
mpretty-cyro wants to merge 2 commits into
Conversation
HomeViewModel collects conversationListAddressesFlow on the main thread as the home screen opens. Its first emission initialises the user configs, which reads ConfigDatabase and so waits for the database to open. When that first open is slow, the home screen sat with an empty list until the app was killed for not responding at launch.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Contributor checklist
playflavour,debugFixes #1234syntaxDescription
ANR cluster with the main thread
BlockedinSQLiteOpenHelper.getReadableDatabase, fromHomeActivity.onCreate→DefaultConversationRepository.conversationListAddressesFlow→ConfigFactory.ensureUserConfigsInitialized→ConfigDatabase.retrieveConfigAndHashes, while another thread is still doing the first database open (setJournalMode).The home screen shows with an empty list and the app is then killed for not responding.
conversationListAddressesFlowis nowflowOn(Dispatchers.Default), so no collector runs its config and database work onits own thread.
Testing: reproduced on an emulator with a debug-only 12s delay in the first database open (not in this PR): a cold launch ANR'd on
dev("Application does not have a focused window") with the main thread stuck for 12s inConfigDatabase.retrieveConfigAndHashes←conversationListAddressesFlow. With this change, across three runs: no main-thread database access, no ANR, and the list loads once the open finishes.