2014-10-18 67 views
0

我打算使用IntentService進行一些處理。該服務從登記在清單中的廣播接收機開始。該服務必須更新數據庫,以便操作可以很長(甚至一分鐘)。對於CPU我可以採取一個喚醒鎖,但關於操作系統?IntentService用於後臺任務

  1. 是否可以在intentservice上調用startForeground?
  2. 殺死後再次創建intentservice?什麼是默認行爲? START_STICKY?
  3. 該服務抓住數據庫鎖(ReentrantReadWrite java鎖)以避免併發訪問,如果服務被終止,鎖被釋放?如果不是,我該怎麼辦?

回答

1
  1. 由於IntentSerivice延伸Service沒有什麼東西叫startForeground()阻止你。儘管如此,你將不得不顯示實際的通知(曾經有一個黑客啓動了前臺服務而沒有通知,但幸運的是它已在4.3中修復)。

  2. IntentService的默認行爲是START_NOT_STICKY。您可以在構造函數或其他地方調用setIntentRedelivery(true)來更改它。

  3. ReentrantReadWrite是一個java級別的鎖,而不是文件/ db/OS級別的鎖。這意味着一旦這個過程死了,鎖定就消失了。 (你確實說'數據庫鎖',但我認爲這只是不準確的措辭 - 你不是鎖定數據庫,是嗎?)。
+0

不,數據庫鎖意味着只抓取db類中的寫入鎖定:) – greywolf82 2014-10-18 07:56:23