素人のアンドロイドアプリ開発日記

AsyncTaskを使ってみる

2011.12.08

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関数)に渡す事ができるはずなので、元のクラスでその値を利用できるようになります。

 

以上です。

 

 

同じカテゴリの記事を紹介します

流れる背景を作るステータスバーの色を好きな色にするカメラの権限の取得をするpush通知の実装を確認をする為に、phpを書くしかないListView GridViewに下部にマージンをあけたい時よくつかうメモListViewの設定split で ドット文字列を、bitmapにするクラスを作ってみた。uriから画像の回転角度を取得するgridviewとlistviewで表示にalphaanimationを使ったら動かないのが存在する問題自分で変数を持つクラスを作ってコピーした時に参照まで渡してしまう問題でかい画像が表示されない。という問題interfaceをandroidで使ってみるフルスクリーンでナビゲーションバーまで消せるパソコンを買ったらする事点滅をさせるスクリプトJsonObjectを扱う時のtry catchが邪魔なのでシンプルにする2chのまとめアプリは気を付けろArrayAdapterの使い方setTimeOutを作るarraylistを並び替えAndroidの勉強で気を付けるべき6つの事staticで変数を持ちまわす時Androidで定規を作る時にサイズを確認してみる。TextureViewがゴミから神になった日ListViewの位置を変更しないで更新する方法animationをxmlで設定するのはアホなようだ。listを作るのがめんどい件について矩形の中の点の存在条件についてScrollViewのScrollToが効かない時Twitterのアプリを暗黙的Intentで狙いうちの巻勉強した内容をクラスにしてみてるText三角形の座標の包括判定をプログラムで実装前回作ったeasingを使って、translateアニメーションにイージングをかける。AndroidのデフォルトのアニメーションがダサいのでEasingをJavascriptから持ってきたmatrixを使って、回転をさせる時に中心点をずらす方法destoryとかで割と実行してるメモリリーク対策AnimationDrawable 動かないTextViewをセンター寄せにする。特定のアプリがインストールされているかを判別する方法surfacevierをaddviewすると、一瞬画面が点滅する件アニメーションで高さを変更listviewで押すとデフォルトで背景に色がつくのを抑止するline-heightをアンドロイドのtextviewで設定をする。listviewの区切り線を消すframelayoutだとmarginが効かない@android2.2アンドロイドのimageviewで背景が透けるという糞仕様を発見ウインドウのサイズを取得する方法decodeResourceは劣化する上に糞遅い。decodeResourceは劣化します。もう一度言います。decodeResourceは劣化します。

カテゴリー:androidアプリTips

公開中のアプリ、是非ダウンロードしてみてください

2chまとめのたね

RSSを利用してさまざまなブログの情報をキュレーションしてくれるアプリ

インストールする

ひらがな戦記

OPENGL ES2 を利用したカルタのソーシャルゲーム

インストールする