2016-02-19 53 views
0

我正在爲Android創建自己的運行應用程序,並且我有一個應該每5分鐘使用TextToSpeech宣佈時間的計時器。我正在使用Chronometer.OnChronometerTickListener來跟蹤時間並觸發音頻輸出。當手機插入計算機時它工作正常,但當我拔下手機並鎖定屏幕時,計時器聽衆似乎在約30秒後進入休眠狀態(因此音頻不起作用)。有什麼辦法可以防止這種情況發生?允許應用程序計時器在屏幕鎖定時運行

回答

3

大多數情況下,當屏幕關閉時需要完成某些操作時,它會在service中完成。

enter image description here (www.slideshare.net)

假設你不知道服務是什麼,從文檔:

A服務是既代表一個 應用程序的慾望的應用組件執行長時間運行的操作,而不是與用戶交互或爲其他要使用的 應用程序提供功能。每個服務類必須在其包的AndroidManifest.xml中有相應的 聲明。服務 可以使用Context.startService()和Context.bindService()來啓動。

所以基本上,它只是在後臺運行,包括屏幕關閉時。您可能會面臨服務被系統終止問題,因爲Android的文檔說明:

注意,這意味着大部分的服務正在運行的時候,它可以 被系統殺死如果是在沉重的記憶力下。如果發生此 ,系統將稍後嘗試重新啓動該服務。這方面的一個 重要的後果是,如果實現 onStartCommand()來安排工作得以異步或 另一個線程中完成的,那麼你可能需要使用START_FLAG_REDELIVERY有 爲你的系統重新提供的意圖,使其如果您的服務在處理時被殺害,則不會丟失 。

在這種情況下,你將需要添加某些代碼,以保持業務的前景,並確保它不被打死:

startForeground();//keeps service from getting destroyed. 

唯一的問題,這可能提供的是服務處於活動狀態時的持續通知。

你也可以使用startSticky()

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 

     // We want this service to continue running until it is explicitly 
     // stopped, so return sticky. 
     return START_STICKY; 
} 

現在,說你是用計時器完成。您可以使用:

stopSelf(); 

停止服務,或:

Context.stopService(); 

此通知並不是太大的問題,但因爲屏幕是最有可能關閉,而正在運行的服務。您還可以自定義您的通知,並且最好讓用戶知道後臺正在進行的操作。

如果您需要更多的幫助,隨意問。

〜Ruchir

相關問題