此处的定时器不考虑Handler配合线程睡眠的方法来进行定时操作,此处只介绍一个比较耐用的定时方法
主要采取AlarmManager+Service+广播这三种方式来进行长期稳定的定时任务方式。不清楚的Service和广播的可以先看看Android 基础
- 监听闹铃广播的创建,当中有对应Android8.0以后对应服务的启动
public class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Intent i=new Intent(context, RegisterService.class);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
//这是8.0以后的版本需要这样跳转
context.startForegroundService(i);
} else {
context.startService(i);
}
}
}
2.对应定时任务的闹铃服务的创建和具体代码如下,很固定的闹钟代码
public class RegisterService extends Service {
@Override
public void onCreate() {
super.onCreate();
}
@Override
public IBinder onBind(Intent intent) {
throw new UnsupportedOperationException("Not yet implemented");
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
new Thread(new Runnable() {
@Override
public void run() {
//TODO 定时任务
Log.d("RegisterService","每隔五分钟执行一次");
}
}).start();
AlarmManager manager= (AlarmManager) getSystemService(ALARM_SERVICE);
int time=5*60*1000;//5分钟
long triggerAtTime =SystemClock.elapsedRealtime()+time;
Intent i=new Intent(this, AlarmReceiver.class);
PendingIntent pi= PendingIntent.getBroadcast(this,0,i,0);
manager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,triggerAtTime,pi);
return super.onStartCommand(intent, flags, startId);
}
}
3.最后一步就是在Activity中启动和关闭即可
//启动定时服务
Intent intent=new Intent(this, RegisterService.class);
startService(intent);
//取消闹铃广播
AlarmManager manager= (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
Intent intent1=new Intent(this, AlarmReceiver.class);
PendingIntent pi=PendingIntent.getBroadcast(this,0,intent1,0);
manager.cancel(pi);
以上只是自己常用于定时任务方法,也可以选择Handler+timer或者Handler+sleep;Handler.postDelayed等方法进行使用从而达到定时目的