Activityから非同期(スレッド)処理へデータを渡す
Activityから非同期(スレッド)処理へデータを渡すこともあると思います。
まずはActivityからexecute()を呼び出す際に渡したいデータを引数にセットします。
※カンマ区切りで複数セット可能
// 非同期(スレッド)処理クラスの生成
AsyncTaskParamsThread thread = new AsyncTaskParamsThread(this);
// 非同期(スレッド)処理の実行
thread.execute("http://www.google.com", "http://www.yahoo.co.jp");
次に、非同期(スレッド)処理クラスの 型1 を受け渡されるデータの型に合わせて変更します。
するとdoInBackgound()の引数でActivityから呼び出すexecute()の引数を受け取ることができますので、
受け取るデータ分、params[0]、params[1] などから取得します。
package technoute.site.com.google.sites.sample.thread;
import android.app.Activity;
import android.os.AsyncTask;
import android.widget.TextView;
/*
* AsyncTask<型1, 型2,型3>
*
* 型1 … Activityからスレッド処理へ渡したい変数の型
* ※ Activityから呼び出すexecute()の引数の型
* ※ doInBackground()の引数の型
*
* 型2 … 進捗度合を表示する時に利用したい型
* ※ onProgressUpdate()の引数の型
*
* 型3 … バックグラウンド処理完了時に受け取る型
* ※ doInBackground()の戻り値の型
* ※ onPostExecute()の引数の型
*
* ※ それぞれ不要な場合は、Voidを設定すれば良い
*/
public class AsyncTaskParamsThread extends AsyncTask<String, Void, String> {
private Activity m_Activity;
/*
* コンストラクタ
*
* @param activity: 読み出し元Activity
*/
public AsyncTaskParamsThread(Activity activity) {
// 呼び出し元のアクティビティを変数へセット
this.m_Activity = activity;
}
/*
* バックグラウンドで実行する処理
*
* @param params: Activityから受け渡されるデータ
* @return onPostExecute()へ受け渡すデータ
*/
@Override
protected String doInBackground(String... params) {
String url1 = params[0];
String url2 = params[1];
String ret = "";
try {
// Sleep処理(例:HTTP通信)
Thread.sleep(1000);
// Sleep処理(例:HTTP解析/画像変換とか)
Thread.sleep(1000);
// 取得してきた文字列・画像などをreturnでonPostExecuteへ渡す
ret = url1 + ", " + url2;
} catch (InterruptedException e) {
e.printStackTrace();
}
return ret;
}
/*
* メインスレッドで実行する処理
*
* @param param: doInBackground()から受け渡されるデータ
*/
@Override
protected void onPostExecute(String param) {
// 読み出し元Activityに設置してあるTextViewを取得
TextView textView = (TextView)this.m_Activity.findViewById(R.id.textView);
// TextViewの文字列をセット
textView.setText(param);
return;
}
}