0

AsynTask終了するまで待ってから続行したいと思います。ただし、ステータスは常にRUNNINGと表示されます。AsyncTask終了したシグナルバックはどのようにできますか?whileループが無限に続くのはなぜですか?onPostExecute()タスクで呼び出されると、ステータスがFINISHEDに変更されると思いました。

private void methodOne(Context context) {

MyNewTask getMyTask = null;

    try {


        getMyTask = new MyNewTask(context, null, null, param1);

        getMyTask.execute(getUrl());

        while(getResourceTask.getStatus().equals(AsyncTask.Status.RUNNING)){

            Log.i("log", "STATUS : " + getMyTask.getStatus());
        }

    } catch (Exception e) {
        e.printStackTrace();
    }
}
4

1 に答える 1

2

このメソッドは UI スレッドで実行されますか? その場合、onPostExecute()実行される機会はありません (UI スレッドがブロックされます)。

通常、ループによって AsyncTask が完了するのを待ちません。これは深刻なコード臭です。でやりたいことは何でも始めるべきですonPostExecute()

だから、代わりに

task.execute();
while(task.getStatus().equals(AsyncTask.Status.RUNNING)) {};
doSomeWork();

以下を使用する必要があります。

task.execute();

と:

void onPostExecute(Param... params) {
    doSomeWork();
}

doSomeWork()を呼び出すクラス内のメソッドはどこにありますかAsyncTask。このようにして、タスクが完了したことが通知されます。

于 2012-10-08T06:48:13.457 に答える