web-dev-qa-db-ja.com

APIレベル<28でメインスレッドのExecutorを取得する方法

APIレベル28(Pie)では、新しいメソッドがContextクラスに導入され、メインスレッドのExecutorを取得します getMainExecutor()

このエグゼキュータを28未満のAPIレベルで取得するにはどうすればよいですか?

7
Abhishek Jain

レトロフィットのコードスニペットを使用できます 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);
    }
}   
8
atarasenko

_com.google.Android.gms.common.util.concurrent.HandlerExecutor_...からnew HandlerExecutor(Looper.getMainLooper());を使用できます。最終的には、 atarasenko と同じ答えになります。

そのためにKotlinに拡張機能を追加しました:

_fun Context.mainExecutor(): Executor {
    return if (VERSION.SDK_INT >= VERSION_CODES.P) {
        mainExecutor
    } else {
        HandlerExecutor(mainLooper)
    }
}
_
5
César Noreña

次を使用できます(アクティビティなど)。

ContextCompat.getMainExecutor(this);

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

1
antaki93