目次
AsyncTask
Androidの独自機能。
非同期処理を行いたい時に利用する。
抽象クラス
ジェネリクス。型を定義する。
AsyncTask<Params, Progress, Result>
Params:非同期で扱いたいオブジェクトの型。
Progress:進捗を管理するための型。
Result:実行結果を受け取るための型。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
import 色々; public class MainActivity extends Activity { TextView tv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv = (TextView) findViewById(R.id.textView1); MyAsyncTask myAsyncTask = new MyAsyncTask(); myAsyncTask.execute(1,10); } class MyAsyncTask extends AsyncTask<Integer, Integer, Boolean> { @Override protected Boolean doInBackground(Integer... params) { for (int i = params[0]; i < params[1]; i++) { try { Thread.sleep(1000); publishProgress(i); } catch (InterruptedException e) { e.printStackTrace(); } } return true; } @Override protected void onProgressUpdate(Integer... values) { super.onProgressUpdate(values); Log.d("TAG", "onProgressUpdate:" + values[0]); tv.setText(values[0] + ""); } @Override protected void onPostExecute(Boolean result) { super.onPostExecute(result); Toast.makeText(MainActivity.this, "終了", Toast.LENGTH_SHORT).show(); } } } |
execute()
別スレッドの処理を起動するメソッド。
可変長引数を渡せる。AsyncTask<Params, Progress, Result>のParamsで定義した型の引数。
doInBackground(Params…)
抽象メソッド。必ず実装すること。
別スレッドで処理を行う為のメソッド。
引数はexecuteの可変長引数が渡ってきて配列として処理される。
今回は1秒おきにiをpublishProgressする。
UIスレッドに関連する処理を行うとエラーになる。
実際にsetText()したらエラーになりました・・・・
publishProgress()
OnProgressUpdate()を呼び出す処理。
引数はAsyncTask<Params, Progress, Result>のProgressで定義した型の可変長引数が渡せる。
onProgressUpdate(Progress…)
進捗状況をUIスレッドで表示できるメソッド。プログレスバーの更新などに使われる。
可変長引数を渡せる。AsyncTask<Params, Progress, Result>のParamsで定義した型の引数。基本的にはpublishProgressの可変長引数が渡ってくる。
今回は1秒おきに1から9までカウントアップする整数をUIスレッドに表示させている。
onPostExecute(Result)
別スレッドの処理完了時にUIスレッドに表示させるメソッド。
引数はdoInBackgroundでretuneした戻り値が渡される。
今回はToastで終了と表示させた。
他にも今回は使ってないメソッドでonPreExecute()もある。
これはdoInBackgroundの前に処理されるメソッドで事前準備的なメソッド。
プログレスバー表示処理などを行うことが多いらしい。
昨日雑だったからちょっと取り戻せたかなと思うけど・・・・
調べるの夢中で課題を聞き漏らすことがしばしば起こるように・・・・
気をつけなければ・・・・
後メソッドを指定時間遅延実行させるPostDelayedメソッドもやったけど明日まとめよう。
気力・・・・ぐふ。
今日のひとこと
extendsくらい書けるようにならなきゃダメだよ
コメント
No Trackbacks.