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

【背景】:想在后台实现长期周期性定时任务,查找网上一堆资料,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-系统推荐的定时任务

发布了86 篇原创文章 · 获赞 53 · 访问量 15万+

猜你喜欢

转载自blog.csdn.net/w464960660/article/details/102885628
今日推荐