From 78a8e9d2939dcb7be3d3a656c6ac630f17d73854 Mon Sep 17 00:00:00 2001 From: Tony Mantler Date: Fri, 5 Aug 2016 14:08:06 -0700 Subject: [PATCH] Fix AsyncTask to handle exceptions in doInBackground When cancelling, the exception will be eaten by FutureTask, but onCancelled would end up never being called due to the exception causing the code to skip calling postResult. b/30304893 Change-Id: I47d859d9ef77245889816b2b6e10bb380bc4979b --- core/java/android/os/AsyncTask.java | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/core/java/android/os/AsyncTask.java b/core/java/android/os/AsyncTask.java index 63f39c59b1b7f..5d022b813a247 100644 --- a/core/java/android/os/AsyncTask.java +++ b/core/java/android/os/AsyncTask.java @@ -298,12 +298,16 @@ public abstract class AsyncTask { mWorker = new WorkerRunnable() { public Result call() throws Exception { mTaskInvoked.set(true); - - Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND); - //noinspection unchecked - Result result = doInBackground(mParams); - Binder.flushPendingCommands(); - return postResult(result); + Result result = null; + try { + Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND); + //noinspection unchecked + result = doInBackground(mParams); + Binder.flushPendingCommands(); + } finally { + postResult(result); + } + return result; } };