我想创建一个能够创建多个对象的Service
,其中每个对象都连接到互联网并下载一些JSON数据和照片。大部分内容非常简单,但我希望它一次发生一次,即在第一个对象完成其动作之前无法创建新对象。
我的Service
知道对象何时执行其操作的最佳方法是什么?
以下是我正在寻找的非常粗略的说明:
答案 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
中,注册上述广播,并在收到广播时,执行下一个任务。