2011-05-06 49 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

相关问题