1. ホーム
  2. android

[解決済み] android asynctaskがuiにコールバックを送信する [重複] 。

2022-04-29 06:44:48

質問

私は以下のasynctaskクラスを持っていますが、これはアクティビティの中にありません。アクティビティでasynctaskを初期化し、asynctaskが私のアクティビティに戻ってコールバックを報告するようにしたい。 それは可能ですか?それとも、asynctaskはアクティビティと同じクラスファイルでなければならないのでしょうか?

protected void onProgressUpdate(Integer... values) 
{
    super.onProgressUpdate(values);
    caller.sometextfield.setText("bla");
}

こんな感じ?

解決方法は?

を作成することができます。 interface に渡してください。 AsyncTask (コンストラクタ内で)メソッドを呼び出します。 onPostExecute()

例えば

あなたのインターフェース

public interface OnTaskCompleted{
    void onTaskCompleted();
}

あなたの活動

public class YourActivity implements OnTaskCompleted{
    // your Activity
}

そしてAsyncTask。

public class YourTask extends AsyncTask<Object,Object,Object>{ //change Object to required type
    private OnTaskCompleted listener;

    public YourTask(OnTaskCompleted listener){
        this.listener=listener;
    }

    // required methods

    protected void onPostExecute(Object o){
        // your stuff
        listener.onTaskCompleted();
    }
}

EDIT

この回答はかなり好評だったので、いくつか追加したいと思います。

Androidの開発を初めて行う場合。 AsyncTask は、UI スレッドをブロックすることなく物事を動かすための高速な方法です。これはいくつかの問題を解決してくれますし、このクラスが動作する方法自体には何の問題もありません。しかし、それは以下のような意味を持ちます。

  • メモリリークの可能性。への参照を保持する場合、メモリリークの可能性があります。 Activity ユーザが画面を離れた後(またはデバイスを回転させた後)でも、メモリ内に残ってしまいます。
  • AsyncTask に結果を配信していない。 Activity もし Activity はすでに破棄されています。このようなことを管理するために余分なコードを追加したり、操作を2回行わなければなりません。
  • の中ですべてを行う複雑なコードです。 Activity

Androidで十分に成長したと感じたら、次のページをご覧ください。 この記事 非同期処理を使ったAndroidアプリの開発には、この方法が適していると思います。