У меня есть служба, которая работает на удаленном процессе (через интерфейс 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 (я не мог подключиться/привязываться к удаленной службе внутри широковещательного приемника)
Что может быть лучшим подходом для решения моей проблемы? Могу ли я иметь широковещательный приемник сигналов тревоги внутри моего класса обслуживания (без использования отдельного широковещательного приемного класса)?
начать службу в вашем радиовещательного приемника, не связываются с ним, связывание невозможно – pskink
Неа я не хочу, чтобы запустить службу внутри радиовещательного приемника, служба уже начала/погонный (его остановить службу). Я хочу подключиться к этой службе, чтобы отправить сообщение ping (отправка сообщений ping через службу) – eranga
да, я знаю, и единственный способ - вызвать 'startService' и получить уведомление в' onStartCommand', так как я сказал, что вы не можете позвонить 'bindService' от широковещательного приемника – pskink