Android使用JobService实现后台服务

本文介绍了如何在Android中使用JobService实现后台服务,以替代不准确的AlarmManager。JobService提供了一种更有效的方式执行非即时后台任务,通过重写onStartJob和onStopJob方法来执行定时服务。文章提到了设置JobService的各种参数,如最小延迟、最长延迟、网络状态、重试策略等,并强调了JobService必须设置至少一个执行条件,不能执行耗时任务,且需要在新线程中处理耗时操作。
摘要由CSDN通过智能技术生成

前言
在Android经常要实现定时服务,定时某个时刻推送消息或者更新数据,一般我们可能是开启Service,在Service中使用AlarmManager,setRepeating定时请求,但是从API19起,并不能保证时效的准确,在5.0以后,Google推出了一个JobService,用来执行一些并非即时执行的后台进程。


使用
在JobService中有两个抽象方法onStartJob(JobParameters)和onStopJob(JobParameters)。onStartJob在JobService被调度到的时候会执行,我们只需要继承JobService然后重写onStartJob方法,并在里面执行我们的后台任务就可以了。

   @Override
    public boolean onStartJob(JobParameters params) {
        return false;
    }

    @Override
    public boolean onStopJob(JobParameters params) {
        return false;
    }

在API中,有这样一句话

This service executes each incoming job on a Handler running on your application's
main thread. This means that you must offload your execution logic to another
thread/handler/AsyncTask of your choosing. Not doing so will result in blocking any
future callbacks <
Android 后台定时提醒功能实现主要有两种方式: 1. 使用 AlarmManager AlarmManager 是 Android 系统提供的一种定时服务,可以在指定时间触发一个 PendingIntent。我们可以在 PendingIntent 中设置提醒通知的内容,然后在指定时间触发 PendingIntent 来发送提醒通知。 具体实现步骤如下: 1) 创建一个 PendingIntent,用于触发提醒通知的操作。 2) 创建一个 AlarmManager 对象,设置定时提醒的时间和重复间隔。 3) 在指定的时间触发 PendingIntent,发送提醒通知。 示例代码: ``` // 创建 PendingIntent Intent intent = new Intent(this, ReminderBroadcastReceiver.class); PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0); // 创建 AlarmManager AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 10000, AlarmManager.INTERVAL_DAY, pendingIntent); ``` 2. 使用 JobScheduler JobScheduler 是 Android 5.0 引入的一种新的调度服务,可以在指定时间或条件下执行某个任务。我们可以在 JobScheduler 中设置提醒通知的内容,然后在指定时间触发 JobScheduler 来发送提醒通知。 具体实现步骤如下: 1) 创建一个 JobService,用于执行提醒通知的操作。 2) 创建一个 JobInfo 对象,设置定时提醒的时间和条件。 3) 将 JobInfo 对象传递给 JobScheduler,启动定时任务。 示例代码: ``` // 创建 JobInfo 对象 JobInfo jobInfo = new JobInfo.Builder(1, new ComponentName(this, ReminderJobService.class)) .setMinimumLatency(10000) .setPersisted(true) .build(); // 创建 JobScheduler JobScheduler jobScheduler = (JobScheduler) getSystemService(JOB_SCHEDULER_SERVICE); jobScheduler.schedule(jobInfo); ``` 以上两种方式均可以实现 Android 后台定时提醒功能,具体选择哪种方式根据实际需求来进行选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值