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;

}

}