2011-05-29 85 views
-1

的主要活動點擊一個按鈕來啓動服務BroadcastReceive如何告訴Service?

服務會做那些工作:

1,隨機10時間戳今天

2,當每個時間戳來的時候,它會做一個任務

現在我有寫功能1,當第一時間戳來了,我可以開始第一個任務

我的方法就是註冊一個BroadcastReceiver通過alarmman時間戳憤怒,當第一次廣播觸發,然後註冊第二時間戳等.....

這是我的問題: 當broadcastreceiver被觸發,如何告訴服務註冊下一個時間戳,然後完成整個工作?

還是那種實現我的服務的方式嗎?

在此先感謝!

回答

0

你不應該這樣做我想。

我可以看到你的方法至少有兩個缺點: - 在alarmanager將是太忙 - 你不能註冊從另一廣播接收器

另外一個brocast接收器,更好的方式來做到這將是使用handler.postDelayed方法:

您的服務應該問一個處理器來自己又回到了幾秒鐘(如果您想)

@Override 
public int onStartCommand(final Intent intent, final int flags, final int startId) {  
    //do some treatment based on the action intent 
    //first action is used to compute 10 time stamps 

    //second action is used to treat task 

    //then use a handler to reschedule your service 
    handler.postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      onStartCommand(<intent for action 2>, flags, startId); 
      Log.v(LOG_TAG, "timer sending intent"); 
     } 
    }, delayInMsToNextTask ); 
}//met 

因此,沒有辦法的研究者廣闊dcast接收器。

我忘了說你應該在你的清單文件中註冊你的兩個intent動作的服務。

<service android:name="myService"> 
    <intent-filter> 
     <action android:name="action1" /> 
    </intent-filter> 
    <intent-filter> 
     <action android:name="action2" /> 
    </intent-filter> 
</service> 

而且,它可能是很好的補充單一的行動,但區別什麼onStartCommand在具有相同名稱的使用意圖演員應該做的。然後,您的服務將在您的清單中註冊一個單一操作。

下一次,如果您覺得您的解釋不太清楚,請發送一些代碼/僞代碼。

Regards, Stéphane