言いたいことはそれだけか

KotlinとかAndroidとかが好きです。調べたことをメモします。٩( 'ω' )و

WorkManager.getInstance()に渡すContext

ちょっと気になったので調べたメモ。
Titleの通りWorkManager#getInstance()の引数のcontext1は何を渡すべきなのか、また何に使われるのか気になった。

developer.android.com

上記のAPI documentには

Context: A Context for on-demand initialization.

としか書いていない。よくわからない。これはapplication contextを渡すべき?それともactitivity? 複数の箇所でWorkManagerのinstanceを取得する場合、渡すcontextによって動作に差が出るか?など気になるポイントがいくつかある。

で、いつものようにコードを読む。まずWorkManager#getInstance()を読むと、Impl classを呼び出しているだけだとわかる。

   public static @NonNull WorkManager getInstance(@NonNull Context context) {
        return WorkManagerImpl.getInstance(context);
    }

Impl classを見にいく。

    @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
    public static @NonNull WorkManagerImpl getInstance(@NonNull Context context) {
        synchronized (sLock) {
            WorkManagerImpl instance = getInstance();
            if (instance == null) {
                Context appContext = context.getApplicationContext();
                if (appContext instanceof Configuration.Provider) {
                    initialize(
                            appContext,
                            ((Configuration.Provider) appContext).getWorkManagerConfiguration());
                    instance = getInstance(appContext);
                } else {
                    throw new IllegalStateException("WorkManager is not initialized properly.  You "
                            + "have explicitly disabled WorkManagerInitializer in your manifest, "
                            + "have not manually called WorkManager#initialize at this point, and "
                            + "your Application does not implement Configuration.Provider.");
                }
            }

            return instance;
        }
    }

こんな感じで実際は引数として渡されたcontextから getApplicationContext() を呼んでそちらを使っているので、特に渡すcontextは気にしなくて良いことがわかる。


  1. 引数なしの同名methodも存在するがdeprecatedである。