Я знаю, что это основной вопрос, я новичок в службе Android. Я провел исследование в Google и StackOverflow. В stackoverflow есть много вопросов, связанных с моей темой или похожих на нее, но я не смог получить правильный ответ, и меня отвлекают на разные темы.
Это простой тестовый код, который я запускаю.
public class Service extends android.app.Service {
private Handler mHandler;
private void ping() {
try {
Log.e("Tag", "Success");
Toast.makeText(getApplicationContext(), "Service Ping", Toast.LENGTH_SHORT).show();
} catch (Exception e) {
Log.e("Error", "In onStartCommand");
e.printStackTrace();
}
scheduleNext();
}
private void scheduleNext() {
mHandler.postDelayed(new Runnable() {
public void run() { ping(); }
}, 3000);
}
public int onStartCommand(Intent intent, int x, int y) {
mHandler = new android.os.Handler();
ping();
return START_STICKY;
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
}
При этом всплывает всплывающее сообщение, а сообщение журнала печатается каждые 3 секунды. Оно работает, даже когда приложение свернуто. Но когда я полностью выхожу из приложения, тост или журнал не печатаются. В этом SO ANSWER ясно сказано, почему сообщение Toast не может быть вызвано без пользовательского интерфейса. И я не могу распечатать LOG, так как процесс убивается.
По сути, я хочу, чтобы служба запускалась в фоновом режиме каждые 5 минут и получала данные из сети. Как мне реализовать услугу? и приветствуются любые примеры кода или руководства?
AlarmManager
(все версии Android) илиJobScheduler
(Android 5.0+). - person CommonsWare   schedule 29.03.2015