2011-05-06 70 views
23

安排警報的代碼。如何在應用程序被Android或任務殺手殺死後保存計劃的鬧鐘?

PendingIntent sender = PendingIntent.getBroadcast(this, id, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
    AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE); 
    am.set(AlarmManager.RTC_WAKEUP, time, sender); 

它的工作正常,但是當我殺死我的應用程序的任務殺手,我失去了我的日程安排警報。如何解決這個問題呢?

+0

我想這種情況下任何解決方案都可用這個問題? – mahesh 2017-08-12 10:38:05

+0

您是否正在使用任何省電模式應用程序(Greenify)或者您是否正在使用強制關閉?有時候可能是由於某些內置省電技術(如應用程序需要列爲受保護以繼續運行)的省電技術? – 2017-08-21 08:42:26

回答

21

當你的應用程序被終止時,你的應用程序會廣播一條消息,當這個消息被廣播時,然後讓偵聽器檢查服務是否仍在運行..如果它沒有運行它。這將確保即使應用程序被終止,您的服務仍在運行。

更新

我會嘗試創建一個流程圖你

Death/Restart of a service

的的onDestroy()方法是服務的一部分。

我希望這會有所幫助。

更新2

有一件事我忘了提及的是,你最好只想要運行的服務的一個實例的事實。所以只要查看onStart()中存在的ID,應該== = 1來啓動它,否則忽略它。的通知的

方法是本服務類

在onStart():當服務正在起動

的onDestroy(該方法被稱爲):這是被稱爲當服務的方法被打死的BroadcastReciever類的通知

方法:

的onReceive():此方法recei VES發送到它(除非經過過濾)

所有意圖查一查BroadcastRecievers(消息廣播)和服務實例(啓動服務)

參考文獻:

http://developer.android.com/reference/android/content/BroadcastReceiver.html

http://developer.android.com/reference/android/app/Service.html

+2

請問您可以寫代碼示例嗎?我不明白爲什麼這個服務死於應用程序。文檔中提到「注意:Alarm Manager適用於您希望在特定時間運行應用程序代碼的情況,即使您的應用程序當前未在運行」 – Divers 2011-05-06 21:08:11

+1

這不包括您的服務死亡。 – JoxTraex 2011-05-06 21:10:21

+3

JoxTraex - 好圖! – Brian 2011-05-06 21:22:23

5

當應用程序關閉時,由警報管理器設置的警報不會被終止,如何在重新啓動時發生所有警報由操作系統清除,因爲沒有持久性。所以你需要做持久性。

  • 每次在設置鬧鐘時都會保存鬧鐘時間。
  • 註冊接收器以啓動完成。
  • 重新啓動時再次設置警報。

    public class BootReceiver extends BroadcastReceiver { 
    
        @Override 
        public void onReceive(Context context, Intent intent) { 
         //re register the alarm 
        } 
    } 
    

的Manifest.xml

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 
....... 
<receiver 
     android:name="BootReceiver" 
     android:enabled="true" 
     android:exported="true" 
     > 
     <intent-filter> 
      <action android:name="android.intent.action.BOOT_COMPLETED" /> 
     </intent-filter> 
    </receiver> 

你可以使用SharedPreference保存(在旁邊時,應觸發,在報警時,應觸發時間或時間)的時間

用它在引導接收器上設置新的警報。

+0

所以你的意思是即使我已經使用SQLIte它可以仍然存在 – 2017-10-19 10:57:33

+0

是的@IdrisStack你也可以使用SQLite來存儲鬧鐘的時間 – 2017-10-23 07:27:18

相關問題