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にある処理が作動します。