美文网首页Android
android service 定时任务

android service 定时任务

作者: cain07 | 来源:发表于2021-02-24 09:16 被阅读0次

希望每隔一段时间做一个操作,在后台运行,锁屏也可以运行。 不容易被系统优化回收,是用timer就可以,还是需要用到服务,效果更好?

既然你需要在后台,那就写个service吧,不过还是很容易被杀死
这不仅需要service, 主要是要用到定时器, 相当于闹钟.

https://www.it1352.com/1653921.html

功能:实现通过按钮开启服务,在服务中延迟10秒去开启广播,在广播接收中又去开启服务,实现循环

https://www.cnblogs.com/tangs/articles/5444003.html

android service实现循环定时提醒功能

https://www.jb51.net/article/133675.htm

实例子:

在服务的onStartCommand方法里面使用AlarmManager 定时唤醒发送广播,在广播里面启动服务

每次执行startService方法启动服务都会执行onStartCommand

1、服务定时唤醒 60秒发一次广播


public class MediaService extends Service { public MediaService() {

    }

    @Override public IBinder onBind(Intent intent) { // TODO: Return the communication channel to the service.
        throw new UnsupportedOperationException("Not yet implemented");
    } /*每次调用startService启动该服务都会执行*/
    public int onStartCommand(Intent intent, int flags, int startId) {

        Log.d("TAG", "启动服务:" + new Date().toString());

        AlarmManager manager = (AlarmManager) getSystemService(ALARM_SERVICE); long triggerTime = SystemClock.elapsedRealtime() + 60000;
        Intent i = new Intent(this, AlarmReceiver.class);
        PendingIntent pi = PendingIntent.getBroadcast(this, 0, i, 0);
        manager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, triggerTime, pi); return super.onStartCommand(intent, flags, startId);
    }

}

采用AlarmManger实现长期精确的定时任务

AlarmManager的常用方法有三个:

  • set(int type,long startTime,PendingIntent pi);//一次性
  • setExact(int type, long triggerAtMillis, PendingIntent operation)//一次性的精确版
  • setRepeating(int type,long startTime,long intervalTime,PendingIntent
    pi);//精确重复
  • setInexactRepeating(int type,long startTime,long
    intervalTime,PendingIntent pi);//非精确,降低功耗

type表示闹钟类型,startTime表示闹钟第一次执行时间,long intervalTime表示间隔时间,PendingIntent表示闹钟响应动作


对以上各个参数的详细解释
闹钟的类型:

  • AlarmManager.ELAPSED_REALTIME:休眠后停止,相对开机时间
  • AlarmManager.ELAPSED_REALTIME_WAKEUP:休眠状态仍可唤醒cpu继续工作,相对开机时间
  • AlarmManager.RTC:同1,但时间相对于绝对时间
  • AlarmManager.RTC_WAKEUP:同2,但时间相对于绝对时间
  • AlarmManager.POWER_OFF_WAKEUP:关机后依旧可用,相对于绝对时间

绝对时间:1970 年 1月 1 日 0 点

startTime:
闹钟的第一次执行时间,以毫秒为单位,一般使用当前时间。

  • SystemClock.elapsedRealtime():系统开机至今所经历时间的毫秒数
  • System.currentTimeMillis():1970 年 1 月 1 日 0 点至今所经历时间的毫秒数

intervalTime:执行时间间隔。

PendingIntent :
PendingIntent用于描述Intent及其最终的行为.,这里用于获取定时任务的执行动作。
详细参考译文:PendingIntent

2、接收到广播调用startService启动服务

public class AlarmReceiver extends BroadcastReceiver {

    @Override public void onReceive(Context context, Intent intent) {
        Intent i = new Intent(context, MediaService.class);
        context.startService(i);
    }
}
image.png

相关文章

  • android service 定时任务

    希望每隔一段时间做一个操作,在后台运行,锁屏也可以运行。 不容易被系统优化回收,是用timer就可以,还是需要用到...

  • react-native启动android service bu

    react-native与android原生交互启动service,里面写了个定时任务,退出登录后重新登录,程序竟...

  • @EnableScheduling、@Scheduled

    ① 在 main 中开启定时任务的注解 @EnableScheduling ②在 Service 中编写定时任务 ...

  • SpringBoot + Quartz定时任务踩过的坑

    SchedulerConfig.java定时任务Job中service注入NullPointerException...

  • AlarmManager开启一个后台servicee

    一:配合service一起简单使用,开启一个后台定时任务 思路简单说明: 开启一个不重复的定时闹钟任务 任务的功能...

  • Android定时任务

    创建定时任务解决打盹问题,但是会在后台不断唤醒cpu,可能对设备续航有一些影响。 Alarm模式(警报模式):An...

  • android定时任务

    Android中几种定时器的总结和比较 - 爱悠闲 采用Handler与线程的sleep(long)方法 采用H...

  • Android定时任务

    参考:Android中定时器的3种实现方法 Thread.sleep java的方式,不推荐sleep使线程暂停,...

  • Android定时任务

    android中定时有很多种是实现,常见的Handler 与Thread的结合,handler.postDelay...

  • Android定时任务

    本章目录 Part One:Timer Part Two:AlarmManager Android中有很多种实现定...

网友评论

    本文标题:android service 定时任务

    本文链接:https://www.haomeiwen.com/subject/ahfdfltx.html