2013-04-22 46 views
17

我需要构建一个每10/15分钟运行一次的后台任务(无关紧要,或者很好),即使应用程序是没有运行。Android - 每15分钟运行一次后台任务,即使应用程序没有运行

我该如何做到这一点?我似乎无法绕过这个包裹。

我读过我可以使用某种runnable()功能或使用后台服务或AlarmManager。我正在考虑后台服务,因为它也必须在应用程序本身没有运行时完成。

什么是更好的方式做到这一点,我怎么能做到这一点?

回答

22

你已经确定了执行代码片段的时间量(时间间隔),它更好地使用AlarmManager,因为它更节能。如果你的应用需要听某种事件,那么服务就是你需要的。

public static void registerAlarm(Context context) { 
    Intent i = new Intent(context, YOURBROADCASTRECIEVER.class); 

    PendingIntent sender = PendingIntent.getBroadcast(context,REQUEST_CODE, i, 0); 

    // We want the alarm to go off 3 seconds from now. 
    long firstTime = SystemClock.elapsedRealtime(); 
    firstTime += 3 * 1000;//start 3 seconds after first register. 

    // Schedule the alarm! 
    AlarmManager am = (AlarmManager) context 
      .getSystemService(ALARM_SERVICE); 
    am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstTime, 
      600000, sender);//10min interval 

} 
+1

但是,即使应用程序本身没有运行,这是否允许我执行代码? – DijkeMark 2013-04-22 19:30:24

+2

是的。报警管理器就像,你(应用程序)告诉操作系统你想在X毫秒后做一些事情。然后系统在BroadcastReciever.onRecieve()中执行该代码,该代码是您希望在x毫秒后在后台执行的代码。 – wtsang02 2013-04-22 19:32:22

+0

它的工作,真的很不错,但是,停止服务呢? am.cancel()?或..谢谢@ wtsang02 – 2015-05-19 16:05:30

2

报警管理器(系统服务)与远程服务与内部警报实现(单独的过程)?

报警管理是你的选择,因为它已经拥有你需要什么,你只需要设置闹钟间隔

相关问题