我想創建一個Service
,它能夠創建許多對象,其中每個對象連接到互聯網並下載一些JSON數據和照片。其中大部分是非常直接的,但我希望它一次發生一次,即一個新的對象不能創建,直到第一個對象完成其操作。如何知道對象何時執行了操作?
什麼是我的Service
知道對象何時執行其操作的最佳方式?
這裏是什麼,我正在尋找一個非常粗略的說明:
我想創建一個Service
,它能夠創建許多對象,其中每個對象連接到互聯網並下載一些JSON數據和照片。其中大部分是非常直接的,但我希望它一次發生一次,即一個新的對象不能創建,直到第一個對象完成其操作。如何知道對象何時執行了操作?
什麼是我的Service
知道對象何時執行其操作的最佳方式?
這裏是什麼,我正在尋找一個非常粗略的說明:
這個怎麼樣?當對象創建完成時,廣播一個意圖(例如,如果您希望它是私有的,則可以使用LocalBroadcast
)。
在您的Service
中,註冊上述廣播,並在接收到廣播時執行下一個任務。
使用IntentService
。在正常使用情況下,它接收到的每個Intent
都按順序處理,並且已處於後臺線程中,因此您甚至不需要在AsyncTask
中執行網絡活動。簡單。
或者,把所有的東西都放在Queue
中,並且由於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();
我想你已經誤解了這個問題。我不打算創建一些意向或服務。我需要從一個服務創建對象。 – 2012-01-27 01:34:26
'IntentService'實現 - 你擴展了操作系統提供的 - 會創建對象而不會阻礙對方。然後,您可以隨意將創建的對象發送到任何地方。 – Argyle 2012-01-27 01:36:28
我沒有使用Intents,我正在使用對象。 – 2012-01-27 01:37:58
使用監聽器。將後臺服務註冊爲對象實例的偵聽器,並且在對象實例處於啓用狀態時,它只會回調所有偵聽器。
還有其他限制嗎?爲什麼你不能在對象實例中保留對服務的引用(反之亦然,如果你擔心對象將是GC),並且當你完成時你調用服務中的方法? – Luis 2012-01-27 01:33:45
我以前一直在調用服務中的一種方法,但我想知道是否有更好的方法來做到這一點。這似乎有點頑皮:) – 2012-01-27 01:36:06