10

画面にコンテンツを表示するアクティビティがあるとします。メソッド (asyncMethod) を非同期で実行する必要があり、それが完了したら、画面上のデータを更新する必要があります。これを行う最も正確で簡単な方法は何ですか?

現在、私が知っている最も簡単な方法は、スレッドを使用することです:

new Thread(new Runnable() {         
    public void run() {
        asyncMethod();              
    }
}).start();

私は AsyncTask に精通していますが、スレッドを使用するよりも複雑であり、非同期で実行する必要があるメソッドごとに、新しい AsyncTask を作成する必要がありますが、これによりコード サイズが大幅に増加します。

メソッドをパラメーターとして取得して実行する一般的な AsincTask について考えましたが、私が知る限り、Java でメソッドをパラメーターとして渡すことは不可能です。

言い換えれば、メソッドを非同期的に実行するための最もコンパクトな(しかし正しい)方法を探しています。

4

2 に答える 2

8

HandlerLooper

ほとんどの場合、Handler をLooperUI スレッドに保持し、それを使用して投稿しRunnableます。例えば:

Handler h = new Handler();
//later to update UI
h.post(new Runnable(//whatever);

PS:HandlerそしてLooper素晴らしいです。Java用に作り直したほどです。

于 2013-05-01T11:48:00.623 に答える
0

コマンドデザイン パターンを使用し、「コマンド」オブジェクトを実行できる汎用 AsyncTask を作成した場合、タスクごとに 1 つのクラスと、それらすべてを実行するための 1 つの汎用 AsyncTask のみが必要になります。リフレクションまたは事前定義されたインターフェイス メソッドを介してメソッドを実行する一般的な「コマンド」を作成することさえできます。

于 2013-05-01T11:40:51.267 に答える