From 020e5345795a157d7829ebbe4d7864595dafc576 Mon Sep 17 00:00:00 2001 From: Vasu Nori Date: Wed, 28 Apr 2010 14:22:38 -0700 Subject: [PATCH] bug:2622719 move 'forcing of cursor execution' to ContentProvider revert part of the CL: Ia561135e974a44ad3e3774ecb23c6a3d0fc38176 and add it to ContentProvider.query() to force query execution in worker thread, instead of having the main thread incur the cost of query execution and potentially get ANR Change-Id: I0ea8a170bd954a421f4ad825f8090319a83a5b2b --- core/java/android/content/ContentResolver.java | 2 ++ .../android/database/sqlite/SQLiteDatabase.java | 14 +++++++------- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/core/java/android/content/ContentResolver.java b/core/java/android/content/ContentResolver.java index d114ecce3d962..b4718ab6ef2b8 100644 --- a/core/java/android/content/ContentResolver.java +++ b/core/java/android/content/ContentResolver.java @@ -247,6 +247,8 @@ public abstract class ContentResolver { releaseProvider(provider); return null; } + // force query execution + qCursor.getCount(); long durationMillis = SystemClock.uptimeMillis() - startTime; maybeLogQueryToEventLog(durationMillis, uri, projection, selection, sortOrder); // Wrap the cursor object into CursorWrapperInner object diff --git a/core/java/android/database/sqlite/SQLiteDatabase.java b/core/java/android/database/sqlite/SQLiteDatabase.java index 70f681fef6adc..fb5507dc8f838 100644 --- a/core/java/android/database/sqlite/SQLiteDatabase.java +++ b/core/java/android/database/sqlite/SQLiteDatabase.java @@ -1341,19 +1341,19 @@ public class SQLiteDatabase extends SQLiteClosable { SQLiteCursorDriver driver = new SQLiteDirectCursorDriver(this, sql, editTable); Cursor cursor = null; - int count = 0; try { cursor = driver.query( cursorFactory != null ? cursorFactory : mFactory, selectionArgs); - - // Force query execution - if (cursor != null) { - count = cursor.getCount(); - } } finally { if (Config.LOGV || mSlowQueryThreshold != -1) { + // Force query execution + int count = -1; + if (cursor != null) { + count = cursor.getCount(); + } + long duration = System.currentTimeMillis() - timeStart; if (Config.LOGV || duration >= mSlowQueryThreshold) { @@ -1361,7 +1361,7 @@ public class SQLiteDatabase extends SQLiteClosable { "query (" + duration + " ms): " + driver.toString() + ", args are " + (selectionArgs != null ? TextUtils.join(",", selectionArgs) - : "") + ", count is " + count); + : "") + ", count is " + count); } } }