AndroidアプリからWebAPIへアクセス
AndroidアプリからWebAPIを呼び出す場合
HTTP通信をするため
メインスレッドとは別のスレッドで
非同期処理する
Androidアプリで、スレッドを作成して
非同期処理させるには
いくつかのアプローチがある
Android 3.0までは
Android SDKで提供されるAsyncTaskクラスを直接利用するのが一般的だった
AsyncTaskクラスでは
メインUIスレッドとは別の非同期処理と
UIスレッドへの実行結果を通知する仕組みが用意されている
これにより、
別スレッドからのUI操作の問題も回避でき
非同期処理が実装できる
ただ、Android 3.0から非同期処理をより
汎用的に扱うためloaderという仕組みができた
loaderクラスは
非同期にデータを読み込むための抽象的クラスで
Activity
Fragmentどちらでも利用できる
Android 3.0未満でも
Support Library という互換ライブラリーを使えば
loaderを使うことができる
AsyncTask と似たもので
AsyncTaskLoader
これは、Loaderのサブクラスで
従来のAsyncTaskクラスの機能が使える
AsyncTaskでは
非同期処理と
UIスレッドへのアクセスができるため
便利だけど
UIへの処理が分散する
AsyncTaskLoaderでは
この問題をActivityに対してコールバックするメソッド、
つまりインターフェースの実装をすることで
解決している
Activityクラスで
LoaderCallbacksインターフェースを実装すれば
非同期処理の各イベントに応じて決められたメソッドが、呼び出される
このメソッドの中で
非同期処理の進捗状況の表示や
処理完了時のViewの更新処理を記述するようにする
このように、ActivityLoaderクラスを使うことで
ActivityのUI制御と非同期処理の処理を分けて実装することができる