2014年4月5日土曜日

[Android] そもそもLoader、AsyncTaskLoaderとは? Loader、AsyncTaskLoader徹底解剖 Part1


皆さんLoader、AsyncTaskLoaderをご存知ですか?
知らない人のために簡単にだけ説明すると、
Androidで非同期処理を行うための仕組みです。


Androidで非同期処理をする方法


Androidで非同期処理をする方法はいくつかあります。
  1. Java標準のThreadクラスを使用する
  2. Androidが用意しているAsyncTaskを使用する
  3. Androidが用意しているLoader、AsyncTaskLoaderを使用する
他にも特殊な方法としてServiceやBroadcastを使用する方法などもありますが、
通常ActivityやFragmentなどで非同期処理をするときは主に上記の3つだと思います。
しかし何故その中でわざわざLoader、AsyncTaskLoaderを使用しなければいけないのでしょう・・・?
Androidが用意した最新の仕組みだからそっちのほうがなんとなくいい・・・
ただそれだけの理由で使ってる人も案外いらっしゃるんじゃないでしょうか?
実際1.と2.にはいくつか問題があります。


Java標準のThreadクラスやAsyncTaskの問題点


それぞれを詳しく解説すると結構長くなってしまうので別途下記リンクにまとめました。
ThreadクラスやAsyncTaskの問題を解決し、更に便利な機能をつけた非同期処理の仕組みとして
Loader、AsyncTaskLoaderが提供されました。


Loader、AsyncTaskLoaderのメリット


それではLoader、AsyncTaskLoaderのメリットは何でしょうか?
  1. 基本的にJava標準のThreadクラスやAsyncTaskの問題点を解決している
  2. 処理結果をキャッシュとして持っているため、次回からは再処理することなく結果を取得できる
  3. Configuration Change発生後、Loaderを再設定すれば再処理することなく最終結果を取得できる
  4. Loaderはデータソースを監視してるため、内容が変更された際に新しい結果を取得できる
まず1.に関してはJava標準のThreadクラスやAsyncTaskの問題点のところにあった
リンクを参照するとどういう問題があるのかわかるでしょう。
基本的にLoader、AsyncTaskLoaderはこれらの問題を解決しています。


Loader、AsyncTaskLoaderってほんとうに便利なの?


これらだけ見ると何だかメリットばっかりで是が非でも使うべきみたいに見えますよね?
でも、実際に使ってみると・・・非常に使いづらい・・・。
  • メソッド名が紛らわしい、わかりづらい
  • ドキュメントの説明が紛らわしい、わかりづらい
  • 意外と詳しく解説しているサイトがない(特に日本語)
という情報面で色々苦労します。

さらに
  • 処理中にHomeボタンをおした時どういう動作するのか?
  • 処理中にBackボタン押した時はどういう動作をするのか?
  • 処理中にConfiguration Changeが発生(画面回転など)した時はどういう動作をするのか?
  • 処理後にConfiguration Changeが発生(画面回転など)した時はどういう動作をするのか?
など、どんな時にどんな挙動するのかを把握し正しく使用しないと
特定の場合のみ起こるバグに繋がったりします。


まとめ


使いづらいし、どういう動作をするかきちんと把握しないとバグにつながる。
しかし、きちんと使いこなせれば他の手法にはないメリットもあります。
つまり正しい使用方法を理解すればこの上ない武器になります。
ゆえにLoader、AsyncTaskLoaderを徹底解剖したいと思います!

0 件のコメント:

コメントを投稿