AsyncTaskを使ってみる

AsyncTaskについて、以前少し言及してましたが、自分用にちょっとまとめておきます

 

/*———————-
AsyncTaskってのは何?
———————-*/

非同期通信です。が、どういう意味か少しわかりにくいのですが、

例)
画面でアニメーションをしながら、裏でxmlを取得。

実際AsyncTaskを使わないとどうなるかと言うと、
画面のアニメーションはxmlの読み込んでいる間は止まってしまいます。
同時に1つの事しかできない。と言う欠点を補うクラスです。

 

/*———————–
利用はどんな時にするの?
———————–*/

上記でもあげたとおり、外部のデータの読み込みの時が多いです。

 

/*————————
使い方
————————-*/

結構、Activityクラス内で作成もできるのですが、おすすめとしては新しいクラスを作成する方法です。
(どちらでもできますが、コードが長くなりすぎると使いづらいので、わけたいとこです。)

NewAsync.java

public class NewAsync extends AsyncTask<String,Integer, String> {

@Override  
protected void onPreExecute() {}

@Override
protected String doInBackground(String... params) {
//publishProgress(_num);
return "";
}

@Override
protected void onProgressUpdate(Integer... values) {}

@Override  
protected void onPostExecute(String result) {}

}

■役割

onPreExecute:実行の最初
doInBackground:実行中
onProgressUpdate:実行の進捗
onPostExecute:実行の後

■AsyncTask<String,Integer, String>

後ろの引数3つについて、
1:doInBackgroundの引数
2:onProgressUpdateの引数
3:onPostExecuteの引数
です。
意味がわからない場合でも上記のセット(<String,Integer, String>)がオススメです。

 

/*———-
流れの説明
———–*/

Activityのクラスなどで、AsyncTaskを作成

NewAsync task = new NewAsync();  
task.execute(URL);

ここで、非同期のクラスの作成と実行をする。

onPreExecuteが実行される。

実行時のexecuteの引数URLはdoInBackgroundに渡される!。

この中で、上から順番に行いたい事を行う。

jsonの読み込みや、画像の生成など。

それが終えたら、

return "";

をする。

jsonなどを読み込んでいた場合には、

return json;

でもいいかもしれない。

onPostExecuteが実行される。

以上で読み込みの完了

 

/*————————————–
取得した値を元のクラスに戻すには
————————————-*/

最後にプラスで取得した値を元のクラスに戻す方法で僕がよく使うのは

MainActivity _mainAct;
public NewAsync(MainActivity mainAct) {  
 _mainAct = mainAct;
}

などしてあげれば、

onPostExecuteの時に

_mainAct.func(_something);

MainActivityのpublicな関数(func:任意のpublic関数)に渡す事ができるはずなので、元のクラスでその値を利用できるようになります。

 

以上です。

 

 

  • written on 2011.12.08
  • category : java

前後の記事

前の記事:

次の記事:

関連の記事

コメントの投稿

  • サイト内検索

新作アプリの紹介

関連サイトの紹介

アンドロイドアプリ開発TIPS
きぐるみカメラ
ふらいぱん
アンドロイドのデザイン集
Page top↑