欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Android——Hander+Service,实现后台长期周期性定时任务

程序员文章站 2022-03-08 11:44:27
...

【背景】:想在后台实现长期周期性定时任务,查找网上一堆资料,AlarmManager 配合 服务  很适合,结果很激动的试了下,测试发现手机息屏后就不工作了,亮屏后可以,但是息屏时间够长 再亮屏也不好使了,网上资料有的说的很有道理,各手机厂家对系统进行了优化,为了降功耗,省电,对AlarmManager做出了限制,息屏休眠后就不能让其继续唤醒工作了(虽然官方资料说明,手机Doze模式下调用setAndAllowWhileIdle() 方法,可以让CPU睡眠时也被唤醒)。 因此又搜集资料,发现基本没有能通过AlarmManager+ Service 这种方式实现 后台长期精确定时任务的,因此,只能另辟蹊径,采用Handler+Service的方法实现。

【代码】:

public class SyncTimeService extends Service {

    Handler handler=new Handler();

    Runnable runnable=new Runnable() {
        @Override
        public void run() {
            // TODO Auto-generated method stub
            

            handler.postDelayed(this, 2000);
        }
    };

    public SyncTimeService() {
    }

    @Override
    public IBinder onBind(Intent intent) {
        // TODO: Return the communication channel to the service.
//        throw new UnsupportedOperationException("Not yet implemented");
        return null;
    }


    @Override
    public void onDestroy() {
        super.onDestroy();
    }

    @Override
        public int onStartCommand(Intent intent, int flags, int startId) {

        handler.postDelayed(runnable,2000);//每两秒执行一次runnable.
        return super.onStartCommand(intent, flags, startId);

    }
}

【参照】:

Android实现定时器的几种方法

官方文档AlarmService

AlarmManager-系统推荐的定时任务