1919import android .database .ContentObserver ;
2020import android .database .Cursor ;
2121import android .net .Uri ;
22+ import android .os .AsyncTask ;
2223
2324import java .io .FileDescriptor ;
2425import 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