How to get Executor for main thread on API level < 28
Asked Answered
H

3

27

On API level 28(Pie) a new method is introduced in the Context class to get Executor for the main thread getMainExecutor().

How to get this executor on API level below 28?

Hulen answered 4/10, 2018 at 8:26 Comment(0)
C
53

You can use (in activity for example):

ContextCompat.getMainExecutor(this);

https://developer.android.com/reference/androidx/core/content/ContextCompat.html#getMainExecutor(android.content.Context)

Cataclinal answered 2/12, 2019 at 17:11 Comment(0)
M
13

You can use code snippet from retrofit https://github.com/square/retrofit/blob/master/retrofit/src/main/java/retrofit2/Platform.java

public class MainThreadExecutor implements Executor {
    private final Handler handler = new Handler(Looper.getMainLooper());

    @Override 
    public void execute(Runnable r) {
        handler.post(r);
    }
}   
Maura answered 4/10, 2018 at 8:42 Comment(1)
d= (◕‿↼ ) Right! there was a reason why Executor is just an interface, allowing it's implements (instead of searching all over for it in different API).Keister
R
9

You can use new HandlerExecutor(Looper.getMainLooper()); from com.google.android.gms.common.util.concurrent.HandlerExecutor...in the end it's the same answer as atarasenko.

I added an extension in Kotlin for that:

fun Context.mainExecutor(): Executor {
    return if (VERSION.SDK_INT >= VERSION_CODES.P) {
        mainExecutor
    } else {
        HandlerExecutor(mainLooper)
    }
}
Riley answered 27/5, 2019 at 19:0 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.