diff options
| author | 2011-10-09 12:37:57 -0700 | |
|---|---|---|
| committer | 2011-10-09 12:50:45 -0700 | |
| commit | 421fa2744556d6483007bc2a6a1e4030811142f9 (patch) | |
| tree | 770d4d84a1c03b5a434808b64104870e82b24723 | |
| parent | 650c53aad5a49c793bbcddad9bfce63a3b3d0360 (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.java | 22 |
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; } |