こんにちは。
お買い物電卓のネタはそろそろなくなってきました。今日からは、現在作成中のアプリで勉強したことを書いていきます。
まずは非同期処理についてです。
Androidでは、DB読み込みなどの重い処理をメインスレッドで行うと、応答なしエラーとなってしまいます。その為、重たい処理は、別スレッドで行う必要があります。
AsyncTask
例です。
Asynctaskのサブクラスを作成します。宣言時に型引数を、実行時に渡すパラメータ、進捗として渡すパラメータ、処理の結果の順に指定します。この例では進捗に関しては省略しています。
まず、コンストラクタで、イメージビューを内部変数に設定しています。
onPreExecuteは、メインスレッドで動作し、事前準備を行いますが、今回は特に記述していません。
そして、doInBackgroundに、バックグラウンドで行いたい処理を記述します。
最後に、onPostExecuteも、メインスレッドで動作しますので、イメージビューにBitmapを反映させています。
呼び出し側を以下のようになります。
API level 11からは、executeOnExecuter(AsyncTask.THREAD_POOL_EXECUTOR, imageUrl)とするようです。
このように、AsyncTaskでは、メインスレッドとバックグラウンド、それぞれで行いたい処理が混在してしまいます。そこで、それらを分離したものがAsyncTaskLoaderです。AsyncTaskLoaderについては、次回以降に書こうと思います。
0 件のコメント:
コメントを投稿