Ищите способ сделать обратный вызов из обработчика Android - PullRequest
0 голосов
/ 30 марта 2012

Это мой первый вопрос StackOverflow, поэтому я прошу прощения за любую двусмысленность, если таковая имеется.

Я ищу способ получения обратного вызова от обработчика Android.

Например, если обработчик вызывается из действия, то как правильно получить от него обратный вызов, который, скажем, собирается изменить некоторый текст на экране внутри этого действия.

Спасибо! -Yevgeniy

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 );
  }

}

1 Ответ

0 голосов
/ 30 марта 2012

На данный момент, из того, что вы показали, нет особого смысла в том, чтобы вообще иметь Handler.Обработчик - это механизм, который присоединен к потоку, который его создает, просто для того, чтобы планировать задачи в том же потоке, поэтому, если 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 помещает код, который должен быть выполнен, в поток пользовательского интерфейса, чтобы представления могли быть изменены и т. д. Таким образом, что касается вашей асинхронной задачи, все, что нужно сделать, - это вызвать метод для обновления пользовательского интерфейса.В действительности все немного сложнее, но интерфейс вашей деятельности остается чистым и простым в использовании для любых асинхронных задач.

...