问题
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?
回答1:
You can use (in activity for example):
ContextCompat.getMainExecutor(this);
https://developer.android.com/reference/androidx/core/content/ContextCompat.html#getMainExecutor(android.content.Context)
回答2:
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);
}
}
回答3:
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)
}
}
来源:https://stackoverflow.com/questions/52642246/how-to-get-executor-for-main-thread-on-api-level-28