summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Dianne Hackborn <hackbod@google.com> 2011-10-09 12:37:57 -0700
committer Dianne Hackborn <hackbod@google.com> 2011-10-09 12:50:45 -0700
commit421fa2744556d6483007bc2a6a1e4030811142f9 (patch)
tree770d4d84a1c03b5a434808b64104870e82b24723
parent650c53aad5a49c793bbcddad9bfce63a3b3d0360 (diff)
Fix issue #5418999: [From My Phone] - ANR when navigating back from OneUp view
Close cursors asynchronously. Change-Id: I32c106d26c0443710789344bf823c288eaf31db5
-rw-r--r--core/java/android/content/CursorLoader.java22
1 files changed, 18 insertions, 4 deletions
diff --git a/core/java/android/content/CursorLoader.java b/core/java/android/content/CursorLoader.java
index 6228bd059f2d..50919d52d82d 100644
--- a/core/java/android/content/CursorLoader.java
+++ b/core/java/android/content/CursorLoader.java
@@ -19,6 +19,7 @@ package android.content;
import android.database.ContentObserver;
import android.database.Cursor;
import android.net.Uri;
+import android.os.AsyncTask;
import java.io.FileDescriptor;
import java.io.PrintWriter;
@@ -49,6 +50,19 @@ public class CursorLoader extends AsyncTaskLoader<Cursor> {
Cursor mCursor;
+ final static class CloseTask extends AsyncTask<Cursor, Void, Void> {
+ @Override
+ protected Void doInBackground(Cursor... params) {
+ params[0].close();
+ return null;
+ }
+ }
+
+ static void closeAsync(Cursor cursor) {
+ CloseTask closeTask = new CloseTask();
+ closeTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, cursor);
+ }
+
/* Runs on a worker thread */
@Override
public Cursor loadInBackground() {
@@ -76,7 +90,7 @@ public class CursorLoader extends AsyncTaskLoader<Cursor> {
if (isReset()) {
// An async query came in while the loader is stopped
if (cursor != null) {
- cursor.close();
+ closeAsync(cursor);
}
return;
}
@@ -88,7 +102,7 @@ public class CursorLoader extends AsyncTaskLoader<Cursor> {
}
if (oldCursor != null && oldCursor != cursor && !oldCursor.isClosed()) {
- oldCursor.close();
+ closeAsync(oldCursor);
}
}
@@ -148,7 +162,7 @@ public class CursorLoader extends AsyncTaskLoader<Cursor> {
@Override
public void onCanceled(Cursor cursor) {
if (cursor != null && !cursor.isClosed()) {
- cursor.close();
+ closeAsync(cursor);
}
}
@@ -160,7 +174,7 @@ public class CursorLoader extends AsyncTaskLoader<Cursor> {
onStopLoading();
if (mCursor != null && !mCursor.isClosed()) {
- mCursor.close();
+ closeAsync(mCursor);
}
mCursor = null;
}