##〇概要
久々にAsyncTaskLoaderを使ったらsupportLoaderManagerが非推奨になっていました。
'getter for supportLoaderManager: LoaderManager!' is deprecated. Deprecated in Java
loaderManagerも同じく
'getter for loaderManager: LoaderManager!' is deprecated. Deprecated in Java
##〇調査
とりあえず公式
https://developer.android.com/reference/android/content/AsyncTaskLoader
API level 28から非推奨と
たしかに
implementation 'com.android.support:appcompat-v7:28.0.0'
のバージョンを下げると警告は消えました。
Revisionsを見てみると
Revision 28.0.0 Productionは[September 21, 2018]からリリースなので1年ぐらい前ですね。
Revision 27.1.0 Release
には以下のようなことが
The underlying implementation of Loaders has been rewritten to use Lifecycle. While the API remains unchanged, there are a number of behavior changes:
ローダー関係はアーキテクチャーライブラリを使うように書き換えるよと。
stackoverflowの投稿を読んでみると、アクティビティやフラグメントのライフサイクルの流れを考えると、ViewModelやLiveData等のアーキテクチャコンポーネントを使うほうが適切になったそうです。
もう利用頻度は大分減った技術なんですかね・・・
しかし、警告にあるようにSupport Libraryではまだ使えるます!
https://developer.android.com/reference/android/support/v4/content/AsyncTaskLoader.html
したがって修正
##〇対応
getSupportLoaderManager().initLoader(LOADER_TAG_METADATA,bundle,callback)
↓
LoaderManager.getInstance(this).initLoader(LOADER_TAG_METADATA,bundle,callback)
loaderManager.destroyLoader(loader.id)
↓
LoaderManager.getInstance(this@MainActivity).destroyLoader(loader.id)
##〇結果
これで警告は解除。
しかし、やはり時代はAndroidのアーキテクチャーコンポーネントを自在に使いこなせるようにならないとダメみたいですね。