Android:AsynkTask

今回は、比較的簡単にAndroid上でAsync(非同期動作)を可能にするAsyncTaskクラスを取り上げてみようと思いますヽ( ´ ▽ ` )ノ

今日はちょっと真剣めにいこうかな?

まず最初に、任意のクラスにAsyncTaskを継承させます。

AsyncTask


public class クラス名 extends AsyncTask {

@Override
protected void onPreExecute() {
// TODO 自動生成されたメソッド・スタブ
super.onPreExecute();
//下ごしらえ
}

// バックグラウンドで実行する処理
@Override
protected Boolean doInBackground(String... params) {
//処理どーーんとこいっ!!
return true;
}

// メインスレッドで実行する処理
@Override
protected void onPostExecute(Boolean result) {
}
}

簡単に書くとこんな感じです。

クラスに、AsyncTaskクラスを継承させてます。
AsyncTask
これですが、<1つめ、2つめ、3つめ>は
1つめ→doInBackground(型...params)の型
2つめ→ダイアログを変更させる時に送る変数型
3つめ→doInBackgroundの戻り値
って感じです。処理によって変更しましょう。

また、
protected void onPreExecute()→バックグラウンド処理に入る前に行う処理。(大抵ダイアログの設定とかする)
メインスレッドにて実行されます

protected 型 doInBackground(型... params)→バックグラウンドで行いたい処理を書く。
別スレッドで動作します。

protected void onPostExecute(型 result)
バックグラウンド処理終了後に呼ばれるメソッド、 doInBackgroundの戻り値がresultに入ります〜
主に、ビューの更新やダイアログの消去とかに使うかな。

ちなみに、僕が現在作成しているTwitterClientで使用しているコードの一部。
AsynkTaskでProfileを取得するタスクです。


public class GetMyProfile extends AsyncTask {

// ダイアログ
private ProgressDialog waitDialog;

@Override
protected void onPreExecute() {
// TODO 自動生成されたメソッド・スタブ
super.onPreExecute();
// プログレスダイアログの設定
waitDialog = new ProgressDialog(context);
// プログレスダイアログのメッセージを設定します
waitDialog.setMessage("Profile読み込み中...");
// 円スタイル(くるくる回るタイプ)に設定します
waitDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
// プログレスダイアログを表示
waitDialog.show();
}

// バックグラウンドで実行する処理
@Override
protected Boolean doInBackground(String... urls) {
//Profileを取得する
try{
TwitterUser tu = twitterArray.get(getArraySize()-1);
tu.userId = tu.twitter.getId();
tu.screenName = tu.twitter.getScreenName();
}catch(Exception e){
return false;
}
return true;
}

// メインスレッドで実行する処理
@Override
protected void onPostExecute(Boolean result) {
waitDialog.dismiss();
waitDialog = null;//ダイアログの消去
}
}

こんな感じでつかうんかなあ・・・・
実は僕もそこまで分かってなかったり(^◇^;)
型宣言まったくかんけいねぇなこれ・・・(´;ω;`)ブワッ

ああ、後簡単だからってあんまりスレッド乱立すると落ちますよ??
なんの考えも無しにListViewとかに突っ込むと悲惨なことになります。(^◇^;)

応用情報実験とかでおそらく避けては通れないと思う道の一つ。

まあがんばりましょう≡( ε:)≡( ε:)