am 421fa274: Fix issue #5418999: [From My Phone] - ANR when navigating back from OneUp view

* commit '421fa2744556d6483007bc2a6a1e4030811142f9':
  Fix issue #5418999: [From My Phone] - ANR when navigating back from OneUp view
diff --git a/core/java/android/content/CursorLoader.java b/core/java/android/content/CursorLoader.java
index 6228bd0..50919d5 100644
--- a/core/java/android/content/CursorLoader.java
+++ b/core/java/android/content/CursorLoader.java
@@ -19,6 +19,7 @@
 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 @@
 
     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 @@
         if (isReset()) {
             // An async query came in while the loader is stopped
             if (cursor != null) {
-                cursor.close();
+                closeAsync(cursor);
             }
             return;
         }
@@ -88,7 +102,7 @@
         }
 
         if (oldCursor != null && oldCursor != cursor && !oldCursor.isClosed()) {
-            oldCursor.close();
+            closeAsync(oldCursor);
         }
     }
 
@@ -148,7 +162,7 @@
     @Override
     public void onCanceled(Cursor cursor) {
         if (cursor != null && !cursor.isClosed()) {
-            cursor.close();
+            closeAsync(cursor);
         }
     }
 
@@ -160,7 +174,7 @@
         onStopLoading();
 
         if (mCursor != null && !mCursor.isClosed()) {
-            mCursor.close();
+            closeAsync(mCursor);
         }
         mCursor = null;
     }