diff --git a/WordPress/src/main/java/org/wordpress/android/ui/reader/actions/ReaderBlogActions.java b/WordPress/src/main/java/org/wordpress/android/ui/reader/actions/ReaderBlogActions.java index f8cf767d0971..4a3fe9f4eb32 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/reader/actions/ReaderBlogActions.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/reader/actions/ReaderBlogActions.java @@ -1,5 +1,7 @@ package org.wordpress.android.ui.reader.actions; +import android.os.Handler; +import android.os.Looper; import android.text.TextUtils; import android.util.Pair; @@ -32,8 +34,15 @@ import java.net.HttpURLConnection; import java.util.Map; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; public class ReaderBlogActions { + // Serial worker for Reader DB writes triggered from Volley response callbacks. Using a single + // shared executor avoids spawning a thread per response and lets SQLite writes queue naturally. + private static final ExecutorService DB_EXECUTOR = Executors.newSingleThreadExecutor(); + private static final Handler MAIN_HANDLER = new Handler(Looper.getMainLooper()); + public static class BlockedBlogResult { public long blogId; public long feedId; @@ -456,12 +465,14 @@ private static void handleUpdateBlogInfoResponse(JSONObject jsonObject, UpdateBl return; } - ReaderBlog blogInfo = ReaderBlog.fromJson(jsonObject); - ReaderBlogTable.addOrUpdateBlog(blogInfo); - - if (infoListener != null) { - infoListener.onResult(blogInfo); - } + final ReaderBlog blogInfo = ReaderBlog.fromJson(jsonObject); + // Move the INSERT OR REPLACE off the main thread; callers expect onResult on main. + DB_EXECUTOR.execute(() -> { + ReaderBlogTable.addOrUpdateBlog(blogInfo); + if (infoListener != null) { + MAIN_HANDLER.post(() -> infoListener.onResult(blogInfo)); + } + }); } /* diff --git a/WordPress/src/main/java/org/wordpress/android/ui/reader/repository/ReaderPostRepository.kt b/WordPress/src/main/java/org/wordpress/android/ui/reader/repository/ReaderPostRepository.kt index 475157150f62..291a6122f541 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/reader/repository/ReaderPostRepository.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/reader/repository/ReaderPostRepository.kt @@ -116,7 +116,7 @@ class ReaderPostRepository @Inject constructor( if (updateAction == ReaderPostServiceStarter.UpdateAction.REQUEST_NEWER || updateAction == ReaderPostServiceStarter.UpdateAction.REQUEST_REFRESH ) { - ReaderTagTable.setTagLastUpdated(tag) + applicationScope.launch(ioDispatcher) { ReaderTagTable.setTagLastUpdated(tag) } } handleUpdatePostsResponse(tag, jsonObject, updateAction, resultListener) } @@ -352,7 +352,7 @@ class ReaderPostRepository @Inject constructor( if (updateAction == ReaderPostServiceStarter.UpdateAction.REQUEST_NEWER || updateAction == ReaderPostServiceStarter.UpdateAction.REQUEST_REFRESH ) { - ReaderTagTable.setTagLastUpdated(tag) + applicationScope.launch(ioDispatcher) { ReaderTagTable.setTagLastUpdated(tag) } } handleUpdatePostsResponse(tag, jsonObject, updateAction, resultListener) }