WorkManager.getInstance()に渡すContext
ちょっと気になったので調べたメモ。
Titleの通りWorkManager#getInstance()
の引数のcontext1は何を渡すべきなのか、また何に使われるのか気になった。
上記の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は気にしなくて良いことがわかる。
-
引数なしの同名methodも存在するがdeprecatedである。↩