Java android意图服务中的计时器

Java android意图服务中的计时器,java,android,Java,Android,我有一个类从我的服务器获取通知,我不使用firebase云消息传递,所以我使用intentservice类获取数据。但是,我想每60秒检查一次通知,但计时器不工作 protected void onHandleIntent(Intent intent) { 当我启动应用程序时,它会正常启动,但之后它不会及时检入 有没有办法在后台每隔60秒检查一次通知 注意:我不使用GCM firebase,我永远不会使用它当您发送意向时,IntentService会启动服务,运行您为该意向定义的任何内容,然后

我有一个类从我的服务器获取通知,我不使用firebase云消息传递,所以我使用intentservice类获取数据。但是,我想每60秒检查一次通知,但计时器不工作

protected void onHandleIntent(Intent intent) {
当我启动应用程序时,它会正常启动,但之后它不会及时检入

有没有办法在后台每隔60秒检查一次通知


注意:我不使用GCM firebase,我永远不会使用它

当您发送意向时,IntentService会启动服务,运行您为该意向定义的任何内容,然后结束服务。如果您打算运行计时器,那么可能在服务之外运行。也许你可以使用一个处理程序,并发布一个延迟的runnable触发意图,尽管我必须强烈建议不要这样做,因为使用手机的无线电进行60秒的检查会很快耗尽电池电量。GCM的Firebase旨在处理这个问题,因为它“批量”网络请求,如果您不想这样做,那么可以使用作业调度器。安卓系统很好地管理着手机的无线电,因此除非60秒是绝对必要的,否则这样做并不明智;用户可能会抱怨电池耗尽

关于那件事:

private static Handler handler = new Handler(Looper.getMainLooper);
那么在你的活动中呢

private Runnable runnable = new Runnable() {
    @Override
    public void run() {
        try{
            //Start your intent service here.
        } finally {
            handler.postDelayed(runnable, 60000);
        }
    }
};
try finally块是指您的进程可能以某种方式触发错误。如果没有必要,您可以将其移除

然后在活动的
onCreate()
中或需要启动重复触发器的任何位置:

runnable.run();

您可以使用报警管理器

    Intent alarmIntent = new Intent(context, MyService.class);

   PendingIntent pendingIntent = PendingIntent.getService(context, 0, alarmIntent, 0);
   AlarmManager manager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);

    manager.setRepeating(AlarmManager.RTC_WAKEUP, 60000, 60000, pendingIntent);

谢谢你的帖子,但这是一个很好的方法,但它对我的应用程序没有用处,因为我会在后台做太多的工作,所以它会释放用户电池谢谢你JobScheduler有用吗?对于用户电池来说,为了使作业调度器有效,它本质上是不精确的;你定义了要完成的工作和需要完成的大致时间,然后安卓会将其与自己的系统进程和其他需要无线访问的应用程序进程一起计时。使用JobInfo描述作业时,可以将作业设置为定期。这些是你可能想要的链接,谢谢我读了这篇文章我没有太多关于云消息的信息,但是我有一个服务器,我可以在sjonarray中得到通知问题是我不确定我应该使用哪种服务,因为正如你说的,它可以释放用户手机的电池。我想知道你的建议你觉得怎么样?我应该使用哪种服务?作业调度程序在后台每30秒正常一次?火基还是替代品?我不想使用它,因为我认为使用firebase系统是毫无意义的。为什么我要与我有服务器的第三方共享通知?据我所知,firebase帮助解决了应用程序不断轮询服务器以检查更新的问题。您的服务器告诉它发生了更改,Firebase自行处理应用程序的通知。如果您不想使用它,那么在repeat上设置JobScheduler应该是最好的选择。要获得更好的指南,请查看以下内容:我使用jobService更新了该类,因此我必须将最低sdk级别16提高到21,无论如何,这不是问题。你能在主活动中写下如何开始30秒吗?此外,如果你更新你的职位与就业服务的例子,我认为这将是有益的其他用户谁寻找相同的事情。再次非常感谢