Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6dafefb0 authored by Romain Guy's avatar Romain Guy
Browse files

Forces AsyncTask to use the main looper

Bug #5333924

This might break applications trying to use AsyncTask on a looper
that is not the main thread, but such apps would already have
issues (AsyncTask has a single static handler and attempting to
use AsyncTask outside of the main thread would likely result
in weird threading issues in other parts of the app.)

Change-Id: Ibbf480627fc7b91326a27d4f5e5af49e8c5b5115
parent 7c963167
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -237,6 +237,7 @@ public abstract class AsyncTask<Params, Progress, Result> {

    /** @hide Used to force static handler to be created. */
    public static void init() {
        // TODO: This doesn't do anything, we should get rid of it
        sHandler.getLooper();
    }

@@ -254,6 +255,7 @@ public abstract class AsyncTask<Params, Progress, Result> {
                mTaskInvoked.set(true);

                Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);
                //noinspection unchecked
                return postResult(doInBackground(mParams));
            }
        };
@@ -288,7 +290,7 @@ public abstract class AsyncTask<Params, Progress, Result> {
    }

    private Result postResult(Result result) {
        Message message = sHandler.obtainMessage(MESSAGE_POST_RESULT,
        @SuppressWarnings({"unchecked"}) Message message = sHandler.obtainMessage(MESSAGE_POST_RESULT,
                new AsyncTaskResult<Result>(this, result));
        message.sendToTarget();
        return result;
@@ -598,6 +600,10 @@ public abstract class AsyncTask<Params, Progress, Result> {
    }

    private static class InternalHandler extends Handler {
        InternalHandler() {
            super(Looper.getMainLooper());
        }
        
        @SuppressWarnings({"unchecked", "RawUseOfParameterizedType"})
        @Override
        public void handleMessage(Message msg) {