2016年12月16日金曜日

非同期処理について・・・AsyncTask

こんにちは。

お買い物電卓のネタはそろそろなくなってきました。今日からは、現在作成中のアプリで勉強したことを書いていきます。

まずは非同期処理についてです。
Androidでは、DB読み込みなどの重い処理をメインスレッドで行うと、応答なしエラーとなってしまいます。その為、重たい処理は、別スレッドで行う必要があります。

AsyncTask


例です。
Asynctaskのサブクラスを作成します。宣言時に型引数を、実行時に渡すパラメータ、進捗として渡すパラメータ、処理の結果の順に指定します。この例では進捗に関しては省略しています。
まず、コンストラクタで、イメージビューを内部変数に設定しています。
onPreExecuteは、メインスレッドで動作し、事前準備を行いますが、今回は特に記述していません。
そして、doInBackgroundに、バックグラウンドで行いたい処理を記述します。
最後に、onPostExecuteも、メインスレッドで動作しますので、イメージビューにBitmapを反映させています。


呼び出し側を以下のようになります。
API level 11からは、executeOnExecuter(AsyncTask.THREAD_POOL_EXECUTOR, imageUrl)とするようです。


このように、AsyncTaskでは、メインスレッドとバックグラウンド、それぞれで行いたい処理が混在してしまいます。そこで、それらを分離したものがAsyncTaskLoaderです。AsyncTaskLoaderについては、次回以降に書こうと思います。



0 件のコメント:

コメントを投稿