Loading core/java/android/content/AsyncTaskLoader.java +24 −5 Original line number Diff line number Diff line Loading @@ -25,10 +25,14 @@ import android.os.AsyncTask; */ public abstract class AsyncTaskLoader<D> extends Loader<D> { final class LoadTask extends AsyncTask<Void, Void, D> { private D result; /* Runs on a worker thread */ @Override protected D doInBackground(Void... params) { return AsyncTaskLoader.this.loadInBackground(); result = AsyncTaskLoader.this.loadInBackground(); return result; } /* Runs on the UI thread */ Loading @@ -36,6 +40,11 @@ public abstract class AsyncTaskLoader<D> extends Loader<D> { protected void onPostExecute(D data) { AsyncTaskLoader.this.dispatchOnLoadComplete(data); } @Override protected void onCancelled() { AsyncTaskLoader.this.onCancelled(result); } } LoadTask mTask; Loading @@ -50,6 +59,7 @@ public abstract class AsyncTaskLoader<D> extends Loader<D> { */ @Override public void forceLoad() { cancelLoad(); mTask = new LoadTask(); mTask.execute((Void[]) null); } Loading @@ -65,11 +75,20 @@ public abstract class AsyncTaskLoader<D> extends Loader<D> { */ public boolean cancelLoad() { if (mTask != null) { return mTask.cancel(false); boolean cancelled = mTask.cancel(false); mTask = null; return cancelled; } return false; } /** * Called if the task was canceled before it was completed. Gives the class a chance * to properly dispose of the result. */ public void onCancelled(D data) { } void dispatchOnLoadComplete(D data) { mTask = null; deliverResult(data); Loading core/java/android/content/CursorLoader.java +8 −1 Original line number Diff line number Diff line Loading @@ -103,6 +103,13 @@ public class CursorLoader extends AsyncTaskLoader<Cursor> { mStopped = true; } @Override public void onCancelled(Cursor cursor) { if (cursor != null && !cursor.isClosed()) { cursor.close(); } } @Override public void destroy() { // Ensure the loader is stopped Loading core/java/android/os/AsyncTask.java +12 −1 Original line number Diff line number Diff line Loading @@ -187,6 +187,17 @@ public abstract class AsyncTask<Params, Progress, Result> { }; mFuture = new FutureTask<Result>(mWorker) { @Override protected void set(Result v) { super.set(v); if (isCancelled()) { Message message = sHandler.obtainMessage(MESSAGE_POST_CANCEL, new AsyncTaskResult<Result>(AsyncTask.this, (Result[]) null)); message.sendToTarget(); } } @Override protected void done() { Message message; Loading Loading
core/java/android/content/AsyncTaskLoader.java +24 −5 Original line number Diff line number Diff line Loading @@ -25,10 +25,14 @@ import android.os.AsyncTask; */ public abstract class AsyncTaskLoader<D> extends Loader<D> { final class LoadTask extends AsyncTask<Void, Void, D> { private D result; /* Runs on a worker thread */ @Override protected D doInBackground(Void... params) { return AsyncTaskLoader.this.loadInBackground(); result = AsyncTaskLoader.this.loadInBackground(); return result; } /* Runs on the UI thread */ Loading @@ -36,6 +40,11 @@ public abstract class AsyncTaskLoader<D> extends Loader<D> { protected void onPostExecute(D data) { AsyncTaskLoader.this.dispatchOnLoadComplete(data); } @Override protected void onCancelled() { AsyncTaskLoader.this.onCancelled(result); } } LoadTask mTask; Loading @@ -50,6 +59,7 @@ public abstract class AsyncTaskLoader<D> extends Loader<D> { */ @Override public void forceLoad() { cancelLoad(); mTask = new LoadTask(); mTask.execute((Void[]) null); } Loading @@ -65,11 +75,20 @@ public abstract class AsyncTaskLoader<D> extends Loader<D> { */ public boolean cancelLoad() { if (mTask != null) { return mTask.cancel(false); boolean cancelled = mTask.cancel(false); mTask = null; return cancelled; } return false; } /** * Called if the task was canceled before it was completed. Gives the class a chance * to properly dispose of the result. */ public void onCancelled(D data) { } void dispatchOnLoadComplete(D data) { mTask = null; deliverResult(data); Loading
core/java/android/content/CursorLoader.java +8 −1 Original line number Diff line number Diff line Loading @@ -103,6 +103,13 @@ public class CursorLoader extends AsyncTaskLoader<Cursor> { mStopped = true; } @Override public void onCancelled(Cursor cursor) { if (cursor != null && !cursor.isClosed()) { cursor.close(); } } @Override public void destroy() { // Ensure the loader is stopped Loading
core/java/android/os/AsyncTask.java +12 −1 Original line number Diff line number Diff line Loading @@ -187,6 +187,17 @@ public abstract class AsyncTask<Params, Progress, Result> { }; mFuture = new FutureTask<Result>(mWorker) { @Override protected void set(Result v) { super.set(v); if (isCancelled()) { Message message = sHandler.obtainMessage(MESSAGE_POST_CANCEL, new AsyncTaskResult<Result>(AsyncTask.this, (Result[]) null)); message.sendToTarget(); } } @Override protected void done() { Message message; Loading