mirror of
https://github.com/vitorpamplona/amethyst.git
synced 2026-08-09 16:14:40 +00:00
fix: move BootCompletedReceiver disk read off the main thread
isEnabled() reads plain SharedPreferences (a synchronous disk read, by design) and scans the accounts cache. Since onReceive runs on the main thread, this triggered a StrictMode DiskReadViolation at boot. Wrap the work in goAsync() + a background thread so it runs off the main thread while keeping the receiver alive until the check completes. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01P4tx1QSE27uoDpnxZZ7msT
This commit is contained in:
+17
-5
@@ -50,11 +50,23 @@ class BootCompletedReceiver : BroadcastReceiver() {
|
||||
"android.intent.action.QUICKBOOT_POWERON",
|
||||
Intent.ACTION_MY_PACKAGE_REPLACED,
|
||||
-> {
|
||||
Log.d(TAG) { "Received ${intent.action}, checking if notification service should start" }
|
||||
if (NotificationRelayService.isEnabled(context)) {
|
||||
Log.d(TAG, "Starting notification relay service")
|
||||
NotificationRelayService.start(context)
|
||||
}
|
||||
// isEnabled() reads plain SharedPreferences (a synchronous disk read, by
|
||||
// design — see LocalPreferences.globalSettingsPrefs) and scans the accounts
|
||||
// cache. onReceive runs on the main thread, so hop off it via goAsync() to
|
||||
// avoid a StrictMode DiskReadViolation while keeping the receiver alive until
|
||||
// the work finishes.
|
||||
val pending = goAsync()
|
||||
Thread {
|
||||
try {
|
||||
Log.d(TAG) { "Received ${intent.action}, checking if notification service should start" }
|
||||
if (NotificationRelayService.isEnabled(context)) {
|
||||
Log.d(TAG, "Starting notification relay service")
|
||||
NotificationRelayService.start(context)
|
||||
}
|
||||
} finally {
|
||||
pending.finish()
|
||||
}
|
||||
}.start()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user