AsyncTask非同期処理後のコールバック機能

More than 3 years have passed since last update.

AsyncTask非同期処理が終了した、終了した後の処理がしたいとき用にコールバック機能を製造します。

技術者さんが作成されたものの引用ですが、元ネタが見つからないため、備忘録として投稿します。


プログラム


AsyckTaskを継承したクラス

public class AsyncTaskClass extends AsyncTask<Void, Void, String> {

private CallBackTask callbacktask;

@Override
protected void onPreExecute() {
super.onPreExecute();
}

@Override
protected String doInBackground(Void... params) {
String result = null;
return result;
}

@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
callbacktask.CallBack(result);
}

public void setOnCallBack(CallBackTask _cbj) {
callbacktask = _cbj;
}

/**
* コールバック用のstaticなclass
*/

public static class CallBackTask {
public void CallBack(String result) {
}
}

}


使用するActivityクラスでインスタンス化とsetOnCallBackメソッドを生成します。


MainActivity.class

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

AsyncTaskClass atClass = new AsyncTaskClass();
atClass.setOnCallBack(new CallBackTask(){

@Override
public void CallBack(String result) {
super.CallBack(result);
// ※1
// resultにはdoInBackgroundの返り値が入ります。
// ここからAsyncTask処理後の処理を記述します。
Log.i("AsyncTaskCallback", "非同期処理が終了しました。");
}

});

// AsyncTaskの実行
atClass.execute();
}
}


非同期処理が終了したら※1にある処理が作動します。