服务不重复

时间:2016-04-23 02:21:11

标签: android service

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(我会给用户选项在预定义的时间内进行备份)

1 个答案:

答案 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);
    }