※Android 3.0 (API level 11) 以降で使用できます。≫Support Library
LoaderManager.initLoader()で指定したLoaderのIDは、getId()で取得できます。
public int getId ()getId - Loader | Android Developers
バックグラウンドで処理するクラスを、AsyncTaskLoaderを継承して定義します。
class HttpAsyncTaskLoader extends AsyncTaskLoader<String> { private String url = null; public HttpAsyncTaskLoader(Context context, String url) { super(context); this.url = url; } @Override public String loadInBackground() { ResponseHandler<String> responseHandler = new ResponseHandler<String>() { @Override public String handleResponse(HttpResponse response) throws IOException { String entity = null; if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { entity = EntityUtils.toString(response.getEntity(), "UTF-8"); } return entity; } }; HttpClient httpClient = new DefaultHttpClient(); String responseBody = null; try { HttpGet httpGet = new HttpGet(this.url); responseBody = httpClient.execute(httpGet, responseHandler); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { httpClient.getConnectionManager().shutdown(); } return responseBody; } }
Loaderの状態変化時に実行する処理を、LoaderCallbacksを実装して定義します。
class LoaderStates implements LoaderManager.LoaderCallbacks<String> { private Context context; public LoaderStates(Context context) { this.context = context; } @Override public Loader<String> onCreateLoader(int id, Bundle args) { String url = args.getString("url"); HttpAsyncTaskLoader loader = new HttpAsyncTaskLoader(this.context, url); // 非同期読み込みを実行する loader.forceLoad(); return loader; } @Override public void onLoadFinished(Loader<String> loader, String data) { if (data != null) { System.out.println(data); // (引数dataに、読み込まれたデータが格納されている) } } @Override public void onLoaderReset(Loader<String> loader) { System.out.println("onLoaderReset"); } }
このクラスは次のように利用します。http://example.comからの読み込みを指示し、結果は標準出力へ出力されます。
Bundle bundle = new Bundle();
bundle.putString("url", "http://example.com");
LoaderStates loaderStates = new LoaderStates(this);
LoaderManager loaderManager = getLoaderManager();
loaderManager.initLoader(0, bundle, loaderStates);
			Web APIの基本的な使い方 (2/3):CodeZine 高江賢 (2013/08/01)
		AsyncTaskLoaderクラスは、AsyncTaskクラスを提供するLoaderのサブクラスです。これはジェネリック クラスですので、定義時に型を指定します。
AsyncTaskLoaderクラス、唯一の抽象メソッドです。このメソッドはワーカースレッドで呼ばれますので、読み込みを行い、その結果を返す処理をさせます。
public abstract D loadInBackground ()loadInBackground - AsyncTaskLoader | Android Developers
LoaderManagerのインスタンスは、ActivityクラスのgetLoaderManager()で取得できます。
public LoaderManager getLoaderManager ()getLoaderManager - Activity | Android Developers
LoaderManager.initLoader()でLoaderを初期化します。
public abstract Loader<D> initLoader (
    int id,
    Bundle args,
    LoaderCallbacks<D> callback
    )
			initLoader - LoaderManager | Android Developers
			idはLoaderのIDです。argsはLoaderのコンストラクタに渡されます。すでにLoaderが存在しているならば、この引数は無視されます。callbackは、Loaderの状態が変化したときに呼ばれます。
public class MainActivity extends Activity
    implements LoaderManager.LoaderCallbacks<String> {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        String url = "http://example.com";
        Bundle bundle = new Bundle();
        bundle.putString("url", url);
        // Loaderの初期化を要求する
        getLoaderManager().initLoader(0, bundle, this);
    }
    @Override
    public Loader<String> onCreateLoader(int id, Bundle args) {
        // このメソッドは、LoaderManager.initLoader()の実行によって呼ばれる
        // 引数argsから、Loaderの生成に必要なデータを得る
        String url = args.getString("url");
        // Loaderを継承するクラスを生成し、
        // それで読み込みを実行し、それを返す
        return loader;
    }
    @Override
    public void onLoadFinished(Loader<String> loader, String data) {
        // このメソッドは、Loaderの読み込みが完了したときに呼ばれる
        // 引数dataに、読み込まれたデータが格納されている
    }
}
		
		LoaderManagerによって管理されるLoaderの、状態変化時の処理を実装します。実装すべきメソッドは次の3つです。
onCreateLoader()は、LoaderManager.initLoader()の実行時に呼ばれます。このメソッドでLoaderを生成し、初期化して返します。
public abstract Loader<D> onCreateLoader (int id, Bundle args)
onLoadFinished()は、作成されているLoaderの読み込みが完了したときに呼ばれます。
public abstract void onLoadFinished (Loader<D> loader, D data)
読み込まれたデータが、dataで渡されます。
Loaderがリセットされたときに呼ばれます。
public abstract void onLoaderReset (Loader<D> loader)