最稳定的长时间定时器任务处理办法

此处的定时器不考虑Handler配合线程睡眠的方法来进行定时操作,此处只介绍一个比较耐用的定时方法
主要采取AlarmManager+Service+广播这三种方式来进行长期稳定的定时任务方式。不清楚的Service和广播的可以先看看Android 基础

  1. 监听闹铃广播的创建,当中有对应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等方法进行使用从而达到定时目的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值