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とかに突っ込むと悲惨なことになります。(^◇^;)
応用情報実験とかでおそらく避けては通れないと思う道の一つ。
まあがんばりましょう≡( ε:)≡( ε:)