am bba231d7: Explicitly bind AsyncTask to main looper.

* commit 'bba231d7a63b58a8c2b174722ed1487b0f7d8270':
  Explicitly bind AsyncTask to main looper.
This commit is contained in:
Jeff Brown
2014-11-15 01:38:48 +00:00
committed by Android Git Automerger
3 changed files with 16 additions and 16 deletions

View File

@@ -5223,8 +5223,6 @@ public final class ActivityThread {
sMainThreadHandler = thread.getHandler(); sMainThreadHandler = thread.getHandler();
} }
AsyncTask.init();
if (false) { if (false) {
Looper.myLooper().setMessageLogging(new Looper.myLooper().setMessageLogging(new
LogPrinter(Log.DEBUG, "ActivityThread")); LogPrinter(Log.DEBUG, "ActivityThread"));

View File

@@ -1659,12 +1659,6 @@ public abstract class ContentProvider implements ComponentCallbacks2 {
} }
private void attachInfo(Context context, ProviderInfo info, boolean testing) { private void attachInfo(Context context, ProviderInfo info, boolean testing) {
/*
* We may be using AsyncTask from binder threads. Make it init here
* so its static handler is on the main thread.
*/
AsyncTask.init();
mNoPerms = testing; mNoPerms = testing;
/* /*

View File

@@ -209,9 +209,9 @@ public abstract class AsyncTask<Params, Progress, Result> {
private static final int MESSAGE_POST_RESULT = 0x1; private static final int MESSAGE_POST_RESULT = 0x1;
private static final int MESSAGE_POST_PROGRESS = 0x2; private static final int MESSAGE_POST_PROGRESS = 0x2;
private static final InternalHandler sHandler = new InternalHandler();
private static volatile Executor sDefaultExecutor = SERIAL_EXECUTOR; private static volatile Executor sDefaultExecutor = SERIAL_EXECUTOR;
private static InternalHandler sHandler;
private final WorkerRunnable<Params, Result> mWorker; private final WorkerRunnable<Params, Result> mWorker;
private final FutureTask<Result> mFuture; private final FutureTask<Result> mFuture;
@@ -265,9 +265,13 @@ public abstract class AsyncTask<Params, Progress, Result> {
FINISHED, FINISHED,
} }
/** @hide Used to force static handler to be created. */ private static Handler getHandler() {
public static void init() { synchronized (AsyncTask.class) {
sHandler.getLooper(); if (sHandler == null) {
sHandler = new InternalHandler();
}
return sHandler;
}
} }
/** @hide */ /** @hide */
@@ -315,7 +319,7 @@ public abstract class AsyncTask<Params, Progress, Result> {
private Result postResult(Result result) { private Result postResult(Result result) {
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
Message message = sHandler.obtainMessage(MESSAGE_POST_RESULT, Message message = getHandler().obtainMessage(MESSAGE_POST_RESULT,
new AsyncTaskResult<Result>(this, result)); new AsyncTaskResult<Result>(this, result));
message.sendToTarget(); message.sendToTarget();
return result; return result;
@@ -620,7 +624,7 @@ public abstract class AsyncTask<Params, Progress, Result> {
*/ */
protected final void publishProgress(Progress... values) { protected final void publishProgress(Progress... values) {
if (!isCancelled()) { if (!isCancelled()) {
sHandler.obtainMessage(MESSAGE_POST_PROGRESS, getHandler().obtainMessage(MESSAGE_POST_PROGRESS,
new AsyncTaskResult<Progress>(this, values)).sendToTarget(); new AsyncTaskResult<Progress>(this, values)).sendToTarget();
} }
} }
@@ -635,10 +639,14 @@ public abstract class AsyncTask<Params, Progress, Result> {
} }
private static class InternalHandler extends Handler { private static class InternalHandler extends Handler {
public InternalHandler() {
super(Looper.getMainLooper());
}
@SuppressWarnings({"unchecked", "RawUseOfParameterizedType"}) @SuppressWarnings({"unchecked", "RawUseOfParameterizedType"})
@Override @Override
public void handleMessage(Message msg) { public void handleMessage(Message msg) {
AsyncTaskResult result = (AsyncTaskResult) msg.obj; AsyncTaskResult<?> result = (AsyncTaskResult<?>) msg.obj;
switch (msg.what) { switch (msg.what) {
case MESSAGE_POST_RESULT: case MESSAGE_POST_RESULT:
// There is only one result // There is only one result