0

これは私の最初の StackOverflow の質問です。あいまいさがあればお詫びします。

Android ハンドラからコールバックを受け取る方法を探しています。

たとえば、ハンドラーがアクティビティ内から呼び出された場合、ハンドラーからコールバックを受け取る適切な方法は何ですか。たとえば、そのアクティビティ内の画面上のテキストを変更するとします。

ありがとう!-エフゲニー

public class MyHandler extends Handler{
  @Override
  public void handleMessage (Message msg) {
    //Do something

    // ???send back the result to the called activity???
  }
}

public class MyActivity extends Activity{

  public void callHandler(){
   MyHandler handler = new MyHandler();
   handler.sendEmptyMessage( 0 );
  }

}
4

1 に答える 1

0

この時点で、あなたが示したことから、ハンドラーを持つことにはあまり意味がありません。ハンドラーは、同じスレッドでタスクをスケジュールする目的でのみ、それを作成するスレッドに接続されるメカニズムであるため、callHandler が別のスレッドによって呼び出された場合、ハンドラーは、callHandler を呼び出したスレッドが何であれ実行されます。Android IPC で最も成功したモデルは次のようなものです

public class myActivity extends Activity {
  public Handler mHandler = new Handler()

  public void startAsynchronousTask() {
    // Fill in as necessary, or offload responsibility elsewhere
    new Thread(new Runnable() {
      public void run {
        //Do something in the background
        ...
        updateUI(results)
      }
    }).start();
  }

  public void updateUI(Results results) {
    mHandler.post(new UIUpdater(results));
  }

  private class UIUpdater implements Runnable {
    UIUpdater(Results results) {
      //construct whatever...
    }

    @Override
    public void run() {
      //Update UI
    }
  }
}

簡単に言えば、これが行うことは、非同期タスクを開始することです....そのタスクが終了すると、updateUI が呼び出されます。updateUI は、実行するコードを UI スレッドに配置して、ビューを変更できるようにします。このようにして、非同期タスクに関する限り、UI を更新するメソッドを呼び出すだけで済みます。実際にはもう少し複雑ですが、アクティビティのインターフェイスをクリーンに保ち、非同期タスクで使いやすくします。

于 2012-03-30T17:10:13.703 に答える