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实现定时器的几种方法
上一篇: 戴口罩无法人脸解锁手机 华为高管科普
下一篇: 武夷岩茶,是武夷山上盛产的一个品种