2014-04-11 39 views

回答

4

實現這個代碼片斷你的問題的條款是有點混亂:

  • 的應用關鍵在於過程。如果該進程被終止,那麼在該進程中運行的所有內容都將被終止。
  • 如果你想讓某個東西在這個過程的死亡中生存下來,你應該使用第二個過程並運行它以在其中生存。
  • 服務可以在自己的過程中運行,在這裏看起來是一個不錯的選擇。看看服務標籤中的android:process屬性:http://developer.android.com/guide/topics/manifest/service-element.html

但是你想要做的也許更簡單:設置一個重複任務。爲此,您可以使用alarm manager

可以,例如:

  • 提供一個懸而未決的意圖
  • 掛起的意圖報警經理會觸發你自己
  • 的服務的服務,我們將喚醒,然後運行。這樣做的好處是不會讓您的服務始終運行,並計算時間以瞭解何時必須喚醒(這會消耗電池電量)。在這裏,警報管理器將在需要時將其喚醒,您的服務將執行其任務並死亡。

如果你有這個問題的答案的第一部分相結合這種方式,在不同的進程中運行的服務,那麼你可以實現的東西,是針對Android設備的重量真的很輕:只有您的服務(在它自己的進程)將在給定的時間間隔內喚醒,並且應用程序的進程將不會由此警報啓動,而僅僅是服務的進程。

關於敬酒通知,是的,服務是一個很好的去處,但通知欄可能更適合顯示通知,並通知用戶一些事件發生在後臺服務中。

+0

這是解決問題的正確答案。 'AlarmManager'將確保Receiver每n分鐘被調用一次,並且不會讓流程保持活躍狀態​​。然而,Adhikari的回答更符合所問的問題。 – velis

1

嘗試實施前臺服務。 foreground service

前臺服務顯示通知,永遠不會停止,直到您想要。

在您服務的onCreate

Notification notification = new Notification(R.drawable.icon, getText(R.string.ticker_text), 
     System.currentTimeMillis()); 
Intent notificationIntent = new Intent(this, ExampleActivity.class); 
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0); 
notification.setLatestEventInfo(this, getText(R.string.notification_title), 
     getText(R.string.notification_message), pendingIntent); 
startForeground(ONGOING_NOTIFICATION_ID, notification); 
+0

我想顯示一個敬酒,而不是通知。 –

+1

如果顯示通知,則服務在前臺運行,永不停止,否則系統將在需要資源時結束服務。 –