タグ「AsyncTask」 の検索結果(1/1)

2014年2月 2日

AsyncTaskと仲良くする必要はないのかもしれない

AsyncTaskと仲良くなろう:バックグラウンド処理とキャンセル
http://greety.sakura.ne.jp/redo/2011/02/asynctask.html

というのを昔書いたのですが。色々あってイマイチになっていたので、さしあたって以下の2点をどうにかしたものを置いておくことにします。

<差分>
・DialogFragment対応。
・なんちゃってHTMLスクレイピングをjsoupベースに変更。

○仲良くする必要はないの?

AsyncTaskLoaderさんの存在もあるんですが、ANRやUIスレッドの概念を理解するのが一番大事で、次にHandler/Message/Loaderあたりの低レベルな仕組みを理解してしまえば、AsyncTaskというのはやっぱり「ヘルパークラス」でしかないな、という。

AsycTaskもLoader系も「(Andoid標準のコーディング手法として)可読性を上げる」目的での利用が一番望ましく、実際のProjectではVolleyなりPicassoなり、もう少し高位(?)のライブラリを使った方が結局のところ生産性が高くなり、同じ機能に対してコード量が減るってことはテスト対象もメンテ対象も縮小するってことで。

あとはそもそもDialog出すよりはActionBarで済ませるとか、Viewにinlineでステータス表示しちゃう方が良かったりするケースも多いと思うんですよね。そのあたりうまく整理できてなくてアレなのですが、柔軟に考えた方が良さそうです。

続きを読む "AsyncTaskと仲良くする必要はないのかもしれない"

2011年2月 7日

AsyncTaskと仲良くなろう:バックグラウンド処理とキャンセル

○お題:とあるURLにXMLがあって、XMLの中に画像のURLがあるのでダウンロードして表示するサンプル

  • ・とあるURLにXMLがあります。
  • ・XML内に画像のURLがあります。
  • ・その画像をダウンロードして表示します。
  • ・ダウンロードの開始にはボタンをタップします。
  • ・ダウンロード中は進行状況を示すダイアログが表示されます。
  • ・BACKキーで中断できます。

「別スレッド処理:new Thread(new Runnable).start()」とか、「別スレッドからのUI操作:Handler.post(new Runnable)」とか「バックグラウンド処理+UI更新AsyncTask実装例」まではそこそこサンプルが見つかるのですが、「中断処理」まで実例が載ってるサンプルがなかなか見つからないので、一から起こしてみることにしました。

async_task_01.png async_task_02.png

downloadボタンを押すと、「ボタンの無効化」「ダイアログの表示」を実行、別スレッドでCookpadから肉じゃが画像をダウンロードします。途中BACKキーでキャンセルが可能です。ダイアログ消去をトリガにスレッドを止めてます。

async_task_03.png async_task_04.png

無事ダウンロードが終わった際にはダイアログを消去して、肉じゃが画像を表示します。

以下、関連するANRとUI Threadの話に続いて、AsyncTaskの簡単な説明とソースをば。

【2014.02.12追記】本エントリ中の話がそこそこ古く、ソースコードも正常に動作しないことから、DialogFragmentベースで書き換えた続編のエントリ「AsyncTaskと仲良くする必要はないのかもしれない」を作成しました。初心者向けではないエントリになってしまっておりますが、よろしければこちらも参照ください。

続きを読む "AsyncTaskと仲良くなろう:バックグラウンド処理とキャンセル"