Doze模式下受限功能
- 网络访问被禁止
- 系统忽略唤醒CPU或者屏幕操作
- 系统不再执行同步服务
- alarm任务将会在下次退出Doze模式的时候执行
Alarm机制
Alarm具有唤醒CPU的功能
借助AlarmManager类实现。调用Context的getSystemService()方法来获取实例
AlarmManager manager=(AlarmMananger)getSystemService(Context.ALARM_SERVICE);
public class LongRunningService extends Service {
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
new Thread(new Runnable() {
@Override
public void run() {
// 在这里执行具体的逻辑操作
}
}).start();
AlarmManager manager=(AlarmManager) getSystemService(ALARM_SERVICE);
int anHour=60*60*1000; // 这是一小时的毫秒数
long triggerAtTime= SystemClock.elapsedRealtime()+anHour;
Intent i=new Intent(this,LongRunningService.class);
PendingIntent pi=PendingIntent.getService(this,0,i,0);
manager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,triggerAtTime,pi);
return super.onStartCommand(intent, flags, startId);
}
}