fix(android): move TcSdk.init() to background thread to prevent ANR#70
Open
Keyur Gandhi (keyurgit45) wants to merge 3 commits intotruecaller:masterfrom
Open
fix(android): move TcSdk.init() to background thread to prevent ANR#70Keyur Gandhi (keyurgit45) wants to merge 3 commits intotruecaller:masterfrom
Keyur Gandhi (keyurgit45) wants to merge 3 commits intotruecaller:masterfrom
Conversation
TcSdk.init() performs synchronous ContentResolver.query() to the Truecaller app's ContentProvider, which can block for seconds when the Truecaller app is slow to respond. Since Flutter MethodChannels dispatch to the Android main thread, this blocks the UI thread and triggers ANR. This change wraps TcSdk.init() in a single-thread executor so the ContentProvider queries run on a background thread. The result is posted back to the main thread via Handler for the MethodChannel response. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…hutdown - Add AtomicBoolean guard to prevent result.success() after cleanUp() detaches the MethodChannel (fixes IllegalStateException on stale reply) - Use shutdown() instead of shutdownNow() so in-flight TcSdk.init() completes gracefully instead of being interrupted mid-execution - Recreate executor in onAttachedToActivity() after prior shutdown - Per-call resultConsumed AtomicBoolean prevents double-reply Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…fter init - Wrap ioExecutor.execute in try-catch for RejectedExecutionException to prevent crash during rapid detach-reattach (config change) - Submit TcSdk.clear() to executor before shutdown() so it runs after any in-flight TcSdk.init() completes, preventing data race on the TcSdk singleton Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
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.
TcSdk.init() performs synchronous ContentResolver.query() to the Truecaller app's ContentProvider, which can block for seconds when the Truecaller app is slow to respond. Since Flutter MethodChannels dispatch to the Android main thread, this blocks the UI thread and triggers ANR.
This change wraps TcSdk.init() in a single-thread executor so the ContentProvider queries run on a background thread. The result is posted back to the main thread via Handler for the MethodChannel response.