-1

У меня есть служба, которая работает на удаленном процессе (через интерфейс AIDL). Это неостанавливаемая услуга (которая начинается с полной загрузки и продолжается до удаления приложения). Эта служба продолжает слушать UDP-сокет. Я хочу запустить функцию в этой службе каждые 30 минут (которая отвечает за отправку сообщений ping на сервер через udp socket).Выполнить метод за каждые 30 минут от удаленной службы android

Я попытался начать нить и спать в течение 30 минут, оно не работает

new Thread(new Runnable() { 
    public void run() { 
     while (true) { 
      try { 
       sendPingMessage(); 
       Thread.currentThread().sleep(1000 * 60 * 30); 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
}).start(); 

Эта функция вызывает в произвольном количестве времени. Не совсем через 30 минут.

Также попробовал задание таймера, обработчик и ScheduledExecutorService, не повезло с ним, а

ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor(); 
scheduler.scheduleAtFixedRate (new Runnable() { 
    public void run() { 
     sendPingMessage(); 
    } 
}, 0, 30, TimeUnit.MINUTES); 

Кажется, что проблема с андроида глубокий спящий режим [http://binarybuffer.com/2012/07/executing-scheduled-periodic-tasks-in-android][1]

Я попытался использовать AlarmManger, а также. Но я не мог использовать широковещательный приемник для ящика тревоги в отдельном классе. Поскольку я хочу отправить сообщение ping из удаленной службы android (я не мог подключиться/привязываться к удаленной службе внутри широковещательного приемника)

Что может быть лучшим подходом для решения моей проблемы? Могу ли я иметь широковещательный приемник сигналов тревоги внутри моего класса обслуживания (без использования отдельного широковещательного приемного класса)?

+0

начать службу в вашем радиовещательного приемника, не связываются с ним, связывание невозможно – pskink

+0

Неа я не хочу, чтобы запустить службу внутри радиовещательного приемника, служба уже начала/погонный (его остановить службу). Я хочу подключиться к этой службе, чтобы отправить сообщение ping (отправка сообщений ping через службу) – eranga

+0

да, я знаю, и единственный способ - вызвать 'startService' и получить уведомление в' onStartCommand', так как я сказал, что вы не можете позвонить 'bindService' от широковещательного приемника – pskink

ответ

0

Я использую AlarmManager для своих функций обновления. Возможно, это тоже работает для вас.

void updatecheck(Context context){ 

    Intent alarmIntent = new Intent(context, yourclass.class); 

    PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT); 

    AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 

    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, Calendar.getInstance().getTimeInMillis(), 30 * 60 * 1000, pendingIntent); 
} 
+0

Проблема заключается в том, что я не могу использовать широковещательный приемник пользователя в отдельном классе, так как моя функция отправки ping в удаленной службе. Если есть способ использовать широковещательный приемник внутри моего удаленного класса обслуживания, это решит проблему. – eranga

+0

Может быть, обработка трансляции ?, http://stackoverflow.com/questions/9128103/broadcastreceiver-with-multiple-filters-or-multiple-broadcastreceivers – Riksor

Смежные вопросы