質問: 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(); ``` AsyncTaskを継承したAsyncTaskClassのインスタンスを生成した後、 doInBackground()の戻り値をstatic inner classであるCallBackクラスが受け取って、 そのあと、execute()で、AsyncTaskを実行。 という流れだと思うのですが、AsyncTaskを実行する前にCall Backの引数としてresultが入っていると思います。普通に考えたら、AsyncTaskを実行してからdoInBackground()の戻り値を得ることができると思うのですが、なぜ戻り値を受け取ってからexecute()なのでしょうか? なんでAsyncTaskを実行する前にdoInBackground()の戻り値を使えるか理解できません。 Javaのコールバックを理解できない、そもそもの私の理解力の問題だと思うのですが、わかりやすくご教示して頂きたいです。 何卒、よろしくお願いいたします。
回答: 上から順に処理が実行されているわけではないです。 Log.e()でログを入れたりデバッガでステップ実行してみて どういう順番で処理が実行されているか確認されてみては