我有一项GPS服务,其工作是将坐标提取到服务器中。该服务假设全天候运行。但它在某种程度上被杀死了。 这只是在android v 2.3中讨价还价。在android v2.2上运行正常。
在这项服务中,我正在使用“LocationManager”,它的方法是“requestLocationUpdates”,它正在创建一个循环。这个循环负责获取坐标。所以我的目标是保持循环运行。
那么做什么,通过服务24/7运行。
答案 0 :(得分:2)
This server suppose to be run 24/7
你不能那样做。正如您所发现的那样,这个术语的任何真正含义都是not possible。它也是not a good design choice。
如果你绝对需要它一直在运行,你需要
通过PARTIAL_WAKE_LOCK
获取PowerManager
。这将保持CPU
在所有的时间,你的程序运行。做好准备让人震惊
电池寿命下降。
而是使用AlarmManager。您可以通过在相关时间点启动服务的AlarmManager安排PendingIntent来完成工作。完成后,再次终止服务。
下面的示例代码显示了如何使用AlarmManager,它将在5分钟后启动启动YourService的意图:
// get a calendar with the current time
Calendar cal = Calendar.getInstance();
// add 5 minutes to the calendar object
cal.add(Calendar.MINUTE, 5);
Intent intent = new Intent(ctx, YourService.class);
PendingIntent pi = PendingIntent.getService(this, 123, intent,
PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pi);
答案 1 :(得分:0)
请使用在指定时间段后开始服务的重复警报管理器
private void setAlarm() {
AlarmManager alarmManager = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(getApplicationContext(), LocationUpdateService.class);
intent.putExtra("locationSendingAlarm", true);
PendingIntent pendingIntent = PendingIntent.getService(this, AppConstants.PENDING_INTENET_LOCATION_SENDING_ALARM_ID, intent,0);
try {
alarmManager.cancel(pendingIntent);
} catch (Exception e) {
}
int timeForAlarm=5*1000*60; // 5 minutes
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,System.currentTimeMillis()+timeForAlarm, timeForAlarm,pendingIntent);
}