如何知道对象何时执行了操作?

时间:2012-01-27 01:19:56

标签: java android android-service

我想创建一个能够创建多个对象的Service,其中每个对象都连接到互联网并下载一些JSON数据和照片。大部分内容非常简单,但我希望它一次发生一次,即在第一个对象完成其动作之前无法创建新对象。

我的Service知道对象何时执行其操作的最佳方法是什么?

以下是我正在寻找的非常粗略的说明:

enter image description here

3 个答案:

答案 0 :(得分:2)

使用IntentService。在正常使用中,它接收的每个Intent都是按顺序处理的,并且已经在后台线程中,因此您甚至不需要在AsyncTask中进行网络活动。容易。

或者,将所有内容放在Queue中,并在onPostExecute() s中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 :(得分:1)

使用听众。让后台服务注册为对象实例的侦听器,当对象实例执行时,它只是回调所有侦听器。

答案 2 :(得分:1)

这个怎么样?对象创建完成后,广播一个意图(例如,如果您希望它是私有的话,可以使用LocalBroadcast。)

Service中,注册上述广播,并在收到广播时,执行下一个任务。