このエントリーを含むはてなブックマークはてなブックマーク - [Android]非同期処理の実行 この記事をクリップ!Livedoorクリップ - [Android]非同期処理の実行 Yahoo!ブックマークに登録 このエントリをつぶやくこのWebページのtweets Googleブックマークに追加

Androidでは、WEBサービスとのやりとりやWEB APIの実行を行う事が多いとおもいます。
・「何かを問い合わせしている間、他の操作をさせたくない。」
・「問い合わせ中に画面描画を更新したい。」
といった場合は通信系処理などを非同期で実行する必要があります。

AsyncTask クラスを使います。
.Netでの「BeginInvoke(Delegate, Object[])」みたいなもんですね。

以下がそのサンプル

// メインのActivity
public class MainActivity extends Activity {

	//お決まりの初期処理
	@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
		//・
		//・
		//・
		//・
		//・

		bttn1 = (Button) this.findViewById(R.id.BTTN1);

        // 非同期処理実行ボタン用クリックイベントハンドラ設定
        bttn1.setOnClickListener(new OnClickListener(){
			public void onClick(View arg0) {
				Button01_OnClick();
			}

        });
    }

	// 非同期実行を呼び出すボタンのOnClickリスナ関数
	private void Button01_OnClick() {
		// ここから 非同期実行クラスの実装 *******************
		//呼び出し元Activityの情報を渡して、BackGroundTaskをnewする
		BackGroundTask bgtask = new BackGroundTask(this);

		//必要は引数を渡して実行
                bgtask.execute("Test");
	}  

	// BackGroundTask処理終了後のCallBack関数
	public void OnCallback(String sResult)
	{
		// 戻り値をStringとして貰う場合
	}

	// *************** ここから 非同期実行クラスの実装 *******************
	// 非同期実行Class 終了後に親ActivityのOnCallback()を実行

	public class BackGroundTask extends AsyncTask<String,Integer,String> {
	    // 呼び出し元のActivity
	    private MainActivity mActivity;

	    public BackGroundTask(MainActivity activity) {
	        mActivity = activity;
	    }

		@Override
		// 非同期バックグラウンドで実行する関数
		protected String doInBackground(String... params) {

			// ココに非同期実行する処理を

	    }

	    //CallBackの実行
		@Override
	    protected void onPostExecute(String result) {
	        mActivity.OnCallback(result);
	    }

	}
	// *************** ここまで 非同期実行クラスの実装 *******************
}