2

我有一个 GPS 服务,其工作是将坐标获取到服务器中。该服务假设 24/7 运行。但它以某种方式在两者之间被杀死。这仅在 android v 2.3 中发生。在 android v2.2 上运行良好。

在这个服务中,我使用“LocationManager”,它的方法“requestLocationUpdates”正在创建一个循环。这个循环负责获取坐标。所以我的目标是保持循环运行。

那么该怎么办,让服务运行 24/7。

4

2 回答 2

2
This server suppose to be run 24/7

不能那样做。正如您所发现的,这在任何真正意义上的术语中都是不可能的。也不是一个好的设计选择

如果您绝对需要它一直运行,则需要获取PARTIAL_WAKE_LOCKvia 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);
于 2012-08-13T07:07:37.260 回答
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);
    }
于 2012-08-13T07:04:16.707 回答