2013-04-25 128 views
0
public class MyHibernatedService extends Service{ 
    public void onCreate() { 
     super.onCreate(); 
     //declaring the intents .. 
     //some codes... 

     AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE); 
     PendingIntent pendingIntent = PendingIntent.getService(this, 0, IntentServiceToBeRun, 0); 
     Calendar calendar = Calendar.getInstance(); 
     calendar.add(Calendar.MILLISECOND, 10000); 
     am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent); 
     } 
} 

我希望我的Service到每一天在某個時間推出的IntentService。然而,我讀過互聯網上的某個地方,StackOverflow,谷歌等。那Service不能永遠活着,這是Android的工作原理。無論何時Android需要內存或使用太多內存,它都必須殺掉Service。 什麼保證我這個代碼每天都會運行,並且我的Service不會被殺死?執行從服務計劃任務,並保持該服務活

編輯:

作爲服務已啓動或已綁定客戶端的Android系統將試圖保持過程託管服務各地只要:

我在Android文檔注意

「客戶綁定到」它們實際上意味着什麼?

回答

0

不要使用自己的服務來定期啓動另一項服務,而應該使用AlarmManager服務(如您已經這樣做)。這不需要這第二個服務恕我直言。

AlarmManager是一個系統服務,不會被Android殺死,它已經完成了你自己的服務所要做的事情:定期啓動(或在特定時間單次啓動)。

關於「綁定到它的客戶端」:無關緊要,但它意味着其他組件(如其他服務或活動)通過調用Context.bindService()連接到它。有關詳細信息,請檢查dev guide

0

實際上並不需要保持服務的活力。 在這裏,您正在設置AlarmManager,即使手機正在睡眠,也可以在您到達時喚醒您的IntentService。這項服務完成這項工作,而不是你的。

什麼保證我這個代碼每天都會運行,我的服務 不會被殺死?

您在MyHibernatedService中提供的代碼只能執行一次,以設置鬧鐘,那麼您就不再需要它了。如果它是MyHibernatedService所做的唯一的事情,那麼你完全不需要它。

你可以在你的意圖服務中創建一個靜態方法來設置鬧鐘,並根據你想要的地方(可能是你開始使用的地方MyHibernatedService)在任何地方調用它。另外,如果您的意圖服務開始時間確實不需要精確的準確度,則更願意使用setInexactRepeating()而不是setRepeating()