皆さんLoader、AsyncTaskLoaderをご存知ですか?
知らない人のために簡単にだけ説明すると、
Androidで非同期処理を行うための仕組みです。
Androidで非同期処理をする方法
Androidで非同期処理をする方法はいくつかあります。
- Java標準のThreadクラスを使用する
- Androidが用意しているAsyncTaskを使用する
- Androidが用意しているLoader、AsyncTaskLoaderを使用する
通常ActivityやFragmentなどで非同期処理をするときは主に上記の3つだと思います。
しかし何故その中でわざわざLoader、AsyncTaskLoaderを使用しなければいけないのでしょう・・・?
Androidが用意した最新の仕組みだからそっちのほうがなんとなくいい・・・
ただそれだけの理由で使ってる人も案外いらっしゃるんじゃないでしょうか?
実際1.と2.にはいくつか問題があります。
Java標準のThreadクラスやAsyncTaskの問題点
それぞれを詳しく解説すると結構長くなってしまうので別途下記リンクにまとめました。
ThreadクラスやAsyncTaskの問題を解決し、更に便利な機能をつけた非同期処理の仕組みとして
Loader、AsyncTaskLoaderが提供されました。
Loader、AsyncTaskLoaderのメリット
それではLoader、AsyncTaskLoaderのメリットは何でしょうか?
- 基本的にJava標準のThreadクラスやAsyncTaskの問題点を解決している
- 処理結果をキャッシュとして持っているため、次回からは再処理することなく結果を取得できる
- Configuration Change発生後、Loaderを再設定すれば再処理することなく最終結果を取得できる
- Loaderはデータソースを監視してるため、内容が変更された際に新しい結果を取得できる
リンクを参照するとどういう問題があるのかわかるでしょう。
基本的にLoader、AsyncTaskLoaderはこれらの問題を解決しています。
Loader、AsyncTaskLoaderってほんとうに便利なの?
これらだけ見ると何だかメリットばっかりで是が非でも使うべきみたいに見えますよね?
でも、実際に使ってみると・・・非常に使いづらい・・・。
- メソッド名が紛らわしい、わかりづらい
- ドキュメントの説明が紛らわしい、わかりづらい
- 意外と詳しく解説しているサイトがない(特に日本語)
さらに
- 処理中にHomeボタンをおした時どういう動作するのか?
- 処理中にBackボタン押した時はどういう動作をするのか?
- 処理中にConfiguration Changeが発生(画面回転など)した時はどういう動作をするのか?
- 処理後にConfiguration Changeが発生(画面回転など)した時はどういう動作をするのか?
特定の場合のみ起こるバグに繋がったりします。
まとめ
使いづらいし、どういう動作をするかきちんと把握しないとバグにつながる。
しかし、きちんと使いこなせれば他の手法にはないメリットもあります。
つまり正しい使用方法を理解すればこの上ない武器になります。
ゆえにLoader、AsyncTaskLoaderを徹底解剖したいと思います!
0 件のコメント:
コメントを投稿