MyBroadCast
公共类BackupBroadCast扩展了WakefulBroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Intent i = new Intent(context, BackupService.class);
context.startService(i);
}
}
为MyService
public class BackupService extends Service {
public int REQUEST_CODE = 99999;
@Override
public void onCreate() {
Log.d("Service", "onCreate");
ativarTemporizador();
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
//HERE COME THE CODE TO EXECUTE EVERY x time the alarm call the service
Log.d("Service", "onStartCommand");
return super.onStartCommand(intent, flags, startId);
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
public void ativarTemporizador() {
Log.d("Service", "Start Timer");
Intent intent = new Intent(getApplicationContext(), BackupBroadCast.class);
final PendingIntent pIntent = PendingIntent.getBroadcast(this, REQUEST_CODE,
intent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarm = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
alarm.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() /*Start Right NOW*/,
(10000 /*Repeat Every 10seconds*/), pIntent);
}
}
我如何在应用程序启动时启动服务:
Intent i = new Intent(this, BackupService.class);
startService(i);
但是由于不明原因,警报每10秒钟没有执行服务(就像我配置的那样)
它有一个随机时间
04-22 23:13:47.118 -> onCreate
04-22 23:13:47.118 -> Start Timer
04-22 23:13:47.118 -> onStartCommand
04-22 23:14:10.758 -> onStartCommand
04-22 23:15:10.868 -> onStartCommand
04-22 23:16:11.288 -> onStartCommand
04-22 23:16:48.998 -> onStartCommand
04-22 23:18:11.498 -> onStartCommand
如何让它每x次运行onCommand(我会给用户选项在预定义的时间内进行备份)
答案 0 :(得分:0)
因为我需要使用Api 16> =,我改变了
现在我在onStartCommand中调用starTimer,所以当它第一次运行时启动计时器,当计时器被触发时,重新启动并继续,现在它的100%正确时间
谢谢
public void startTimer() {
Intent intent = new Intent(getApplicationContext(), BackupBroadCast.class);
final PendingIntent pIntent = PendingIntent.getBroadcast(this, REQUEST_CODE,
intent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarm = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
alarm.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 10000, pIntent);
}