アプリの処理を大きく分類すると
これらの処理を滞りなく動かすことや、処理上関係のある部分について
同期をとることが必要となります。
例えば、次のようなケースが考えられます。
Androidアプリは、「UIなどのイベント処理」と「描画」を1つのメインスレッドで処理します。
ただし1つのメインスレッドで処理する場合、次のような問題が発生します。
- 描画処理
- UI(ユーザインターフェース)などのイベント処理
- データ処理(データの読み書き、演算)
これらの処理を滞りなく動かすことや、処理上関係のある部分について
同期をとることが必要となります。
例えば、次のようなケースが考えられます。
- UIの操作に応じて画面部品の表示を更新する
- データを読み込んで画面表示を行う
- 時間のかかる処理をUI処理と平行して行う
Androidアプリは、「UIなどのイベント処理」と「描画」を1つのメインスレッドで処理します。
ただし1つのメインスレッドで処理する場合、次のような問題が発生します。
- a)1ヶ所でも時間がかかる処理が入ると、全体の動きがとまってしまう
- b)メインスレッド以外のスレッドからの描画方法が必要になる
- 別スレッドから描画処理を実行するとエラーが発生
- メインスレッドを通じて処理する必要がある
- スレッド間のメッセージ送信を行う仕組みの理解
- android.osパッケージのLooperクラス、Handlerクラス、Messageクラスの理解が必要
Androidで非同期処理を行うためには、「Handlerクラス」などを使う必要がありますが
AsyncTaskを使えば、それを意識することなく、容易にバックグラウンドで処理を行い
その結果をUIスレッドで表示することができます。
AsyncTaskを使えば、それを意識することなく、容易にバックグラウンドで処理を行い
その結果をUIスレッドで表示することができます。
- バックグラウンドで実行されるメソッド
- AsyncTaskのexecute()メソッドの引数は、このメソッドに渡される
- このメソッドの戻り値が、onPostExecute()に渡される
- publishProgress()メソッドを使用することで、onProgressUpdate()を実行
- AsyncTaskのインスタンスは、UIスレッドで生成
- AsyncTaskのexecute()メソッドは、UIスレッドで実行
- onPreEcecute()、onPostExecute()、doInBackground()、onProgressUpdate()を手動で実行してはいけない
- AsyncTaskは1回だけ実行可能
- 同一インスタンスで2回目を実行すると例外が発生
private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> { protected Long doInBackground(URL... urls) { int count = urls.length; long totalSize = 0; for (int i = 0; i < count; i++) { totalSize += Downloader.downloadFile(urls[i]); publishProgress((int) ((i / (float) count) * 100)); } return totalSize; } protected void onProgressUpdate(Integer... progress) { setProgressPercent(progress[0]); } protected void onPostExecute(Long result) { showDialog("Downloaded " + result + " bytes"); } }
このページへのコメント
G5aPm4 Thanks-a-mundo for the blog article.Much thanks again. Will read on...
40qoTH <a href="http://jtydlhsbzzhs.com/">jtydlhsbzzhs</a>, [url=http://vznadsakdteg.com/]vznadsakdteg[/url], [link=http://yirhcxovtedd.com/]yirhcxovtedd[/link], http://ciwhefiqdeos.com/
CVDrLq <a href="http://fstaklfmqpys.com/">fstaklfmqpys</a>, [url=http://vtazowyktxsy.com/]vtazowyktxsy[/url], [link=http://paagplupsyre.com/]paagplupsyre[/link], http://creuwcawxozf.com/
http://rwhsmkalqeuw.com/
iYehiG <a href="http://yjyvlxbvufis.com/">yjyvlxbvufis</a>, [url=http://luiyvqyewtsd.com/]luiyvqyewtsd[/url], [link=http://bsqsnghmhdwn.com/]bsqsnghmhdwn[/link], http://tfleaibmcrzr.com/
http://gyopdfrcibpq.com/
zorw38 <a href="http://ufygkyuwciwl.com/">ufygkyuwciwl</a>, [url=http://kgmqgohsxdsx.com/]kgmqgohsxdsx[/url], [link=http://yxqbgjpwxyrn.com/]yxqbgjpwxyrn[/link], http://kbmzvnpfdnhk.com/
http://qdzufhceyijt.com/