标签:tail 17. support 服务 adc cpu 分享图片 ret service
在服务的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); } }
AlarmManager的常用方法有三个:
type表示闹钟类型,startTime表示闹钟第一次执行时间,long intervalTime表示间隔时间,PendingIntent表示闹钟响应动作
对以上各个参数的详细解释
闹钟的类型:
绝对时间:1970 年 1月 1 日 0 点
startTime:
闹钟的第一次执行时间,以毫秒为单位,一般使用当前时间。
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); } }
运行结果:
标签:tail 17. support 服务 adc cpu 分享图片 ret service
原文地址:https://www.cnblogs.com/tangchun/p/9675349.html