Как я могу узнать, когда объект выполнил действие? - PullRequest
0 голосов
/ 27 января 2012

Я хотел бы создать Service, способный создавать несколько объектов, каждый из которых подключается к Интернету и загружает некоторые данные JSON и фотографию. Большая часть этого довольно проста, но я хочу, чтобы это происходило по одному, то есть новый объект не может быть создан, пока первый объект не завершил свои действия.

Какой лучший способ для моего Service узнать, когда объект выполнил свои действия?

Вот очень грубая иллюстрация того, что я ищу:

enter image description here

Ответы [ 3 ]

2 голосов
/ 27 января 2012

Используйте IntentService.При нормальном использовании каждый Intent, который он получает, обрабатывается последовательно и уже находится в фоновом потоке, поэтому вам даже не нужно выполнять сетевую активность в AsyncTask.Легко.

В качестве альтернативы, положите все свои вещи в Queue и вызовите «сделать следующее» в результате вызова onPostExecute() в AsyncTask с.

Queue<YourObject> unfinished = getQueue();
List<YourObject> finished = new LinkedList<YourObject>();
Handler handler = new Handler(){
  handleMessage(Message m){
     // Object populated!  Start next?  Blink lights?  Whatever.
  }
}

AsyncTask t = new AsyncTask<...>(handler) {
  Handler h;
  public AsyncTask<...>(Handler h) {
    this.h = h;
  }

  protected V doInBackground(YourObject o) {
    // Network stuff, populate the thing
    return popualtedThing();
  }

  protected V onPostExecute(YourObject o) {
    h.sendMessage(Message.obtain(0,o);
  }
}.execute();
1 голос
/ 27 января 2012

Как насчет этого?Когда создание объекта будет завершено, передайте намерение (вы можете использовать LocalBroadcast, например, если вы хотите, чтобы оно было частным).

В вашем Service зарегистрируйтесь для вышеупомянутой трансляции, и когдаполучено, выполните следующее задание.

1 голос
/ 27 января 2012

Используйте слушателей.Сделайте так, чтобы фоновая служба регистрировалась как прослушиватель экземпляра объекта, а когда экземпляр объекта это делает, он просто вызывает всех слушателей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...