Skip to content

Commit 421fa27

Browse files
author
Dianne Hackborn
committed
Fix issue #5418999: [From My Phone] - ANR when navigating back from OneUp view
Close cursors asynchronously. Change-Id: I32c106d26c0443710789344bf823c288eaf31db5
1 parent 650c53a commit 421fa27

File tree

1 file changed

+18
-4
lines changed

1 file changed

+18
-4
lines changed

core/java/android/content/CursorLoader.java

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import android.database.ContentObserver;
2020
import android.database.Cursor;
2121
import android.net.Uri;
22+
import android.os.AsyncTask;
2223

2324
import java.io.FileDescriptor;
2425
import java.io.PrintWriter;
@@ -49,6 +50,19 @@ public class CursorLoader extends AsyncTaskLoader<Cursor> {
4950

5051
Cursor mCursor;
5152

53+
final static class CloseTask extends AsyncTask<Cursor, Void, Void> {
54+
@Override
55+
protected Void doInBackground(Cursor... params) {
56+
params[0].close();
57+
return null;
58+
}
59+
}
60+
61+
static void closeAsync(Cursor cursor) {
62+
CloseTask closeTask = new CloseTask();
63+
closeTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, cursor);
64+
}
65+
5266
/* Runs on a worker thread */
5367
@Override
5468
public Cursor loadInBackground() {
@@ -76,7 +90,7 @@ public void deliverResult(Cursor cursor) {
7690
if (isReset()) {
7791
// An async query came in while the loader is stopped
7892
if (cursor != null) {
79-
cursor.close();
93+
closeAsync(cursor);
8094
}
8195
return;
8296
}
@@ -88,7 +102,7 @@ public void deliverResult(Cursor cursor) {
88102
}
89103

90104
if (oldCursor != null && oldCursor != cursor && !oldCursor.isClosed()) {
91-
oldCursor.close();
105+
closeAsync(oldCursor);
92106
}
93107
}
94108

@@ -148,7 +162,7 @@ protected void onStopLoading() {
148162
@Override
149163
public void onCanceled(Cursor cursor) {
150164
if (cursor != null && !cursor.isClosed()) {
151-
cursor.close();
165+
closeAsync(cursor);
152166
}
153167
}
154168

@@ -160,7 +174,7 @@ protected void onReset() {
160174
onStopLoading();
161175

162176
if (mCursor != null && !mCursor.isClosed()) {
163-
mCursor.close();
177+
closeAsync(mCursor);
164178
}
165179
mCursor = null;
166180
}

0 commit comments

Comments
 (0)