当前位置: 首页 > 知识库问答 >
问题:

AlarmManager始终每分钟运行一次的服务

上官琦
2023-03-14

我试图在后台设置每5分钟运行一次服务。但它表现得很奇怪:

在Main activity的onCreate中,我将它安排为每5分钟运行一次:

   public void scheduleAlarm(Context context) {
        Intent intent = new Intent(context, AdSyncStartReceiver.class);
        final PendingIntent pIntent = PendingIntent.getBroadcast(context, AdSyncStartReceiver.REQUEST_CODE, intent, PendingIntent.FLAG_UPDATE_CURRENT);

        long firstMillis = System.currentTimeMillis(); // alarm is set right away
        AlarmManager alarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
        alarm.setInexactRepeating(AlarmManager.RTC_WAKEUP,
                firstMillis,
                5 * 60 * 1000, // 5 min
                pIntent);
    }
public class AdSyncStartReceiver extends BroadcastReceiver {

  // Triggered by the Alarm periodically (starts the service to run task)
  @Override
  public void onReceive(Context context, Intent intent) {
    Intent i = new Intent(context, AdSyncService.class);
    context.startService(i);
  }
}
public class AdSyncService extends IntentService {
    public AdSyncService() {
       super("AdSyncService");
    }

    @Override
    protected void onHandleIntent(Intent intent) {
       // Do the task here
       Log.i("AdSyncService", "AdSyncService Service running");
    }

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
}
<receiver
    android:name=".AdManager.AdSyncStartReceiver"
    android:process=":remote" >
</receiver>

<receiver android:name=".AdManager.BootReceiver">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
    </intent-filter>
</receiver>

<service
    android:name=".AdManager.AdSyncService"
    android:exported="false" />
10-28 02:46:51.405    6820-7043/pack I/AdSyncService﹕ AdSyncService Service running
10-28 02:47:04.198    6820-7052/pack I/AdSyncService﹕ AdSyncService Service running
10-28 02:48:04.199    6820-7099/pack I/AdSyncService﹕ AdSyncService Service running
10-28 02:49:04.196    6820-7182/pack I/AdSyncService﹕ AdSyncService Service running

我严格遵循了本教程:

https://guides.codepath.com/android/starting-background-services#using-with-alarmManager-for-periodial-tasks

共有1个答案

熊烨
2023-03-14

试试这个,它对我有效:

 alarm.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime(), 60 * 1000 * 5, pendingIntent);
 类似资料:
  • 大家好,耶稣受难节, 我知道这似乎是一个重复的问题,但事实并非如此,我将向您解释原因: 有几种方法可以在计划的时间执行任务,如TimerTask或ScheduleExecutorService,但它们都不适合我要做的事情,因为这些方法都是这样工作的: -- 但我不希望我的代码在计划时间后一次又一次地运行,我希望我的代码总是在每个计划时间执行,即使是第一次。 还有一个问题:如果android停止后台

  • 问题内容: 我正在使用Python和PyGTK。我对运行某个功能感兴趣,该功能每隔几分钟从串行端口获取数据并保存一次。 当前,我正在时间库中使用sleep()函数。为了能够进行处理,我将系统设置如下: 这种设置使我从串口读取数据的间隔为5分钟。我的问题是我希望能够让我的readserial()函数每隔5分钟暂停一次,并且能够一直执行操作,而不是使用time.sleep()函数。 关于如何解决这个问

  • 我希望每5分钟运行一个脚本,比如说从13:02开始,这样我可以每5分钟运行另一个脚本,但从13:04开始,第二个脚本在第一个作业开始两分钟后运行。我怎样才能做到这一点?

  • 如何每5分钟左右运行一个PHP文件?我尝试使用cron,但它似乎不起作用。假设我想让我的网站运行一个播放声音的php文件。如何使php文件每5分钟运行一次,使声音每5分钟播放一次。我知道JavaScript可以做到这一点,因此函数可以按设定的间隔运行,但我希望文件也这样做。 这样做的原因是我正在创建一个网站,我希望用户得到实时通知。为了做到这一点,我需要运行php文件,以便它可以检测用户通知的更改

  • 问题内容: 我想尝试通过以下方式使用@Schedule批注: 根据日志,CronService运行良好,但是计划的任务“ runsEveryMinute”不起作用。 使用EJB计划任务如何工作? 问题答案: 按照该Javadoc中的注释,默认值是: 除小时,分钟和秒外的所有字段;和 默认情况下为小时,分钟和秒。 通过将小时值保留为默认值,它要求计时器在午夜之后每分钟运行一小时(即00:00、00:

  • 问题内容: 我正在使用node-cron运行计划的作业。我希望作业每隔45分钟运行一次,但操作却很奇怪 这是我正在使用的模式 我的脚本开始于 这是工作执行的前两次 这绝对不是我期望或想要的。我想要的是每45分钟运行一次Jobs。有人可以帮我这个图案吗?谢谢 :) 问题答案: 您可能正在寻找 范围在这里。 秒:0-59 分钟:0-59 时间:0-23 每月的日期:1-31 月:0-11 星期几:0-