30
31

More than 5 years have passed since last update.

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

Posted at

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

30
31
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
30
31