安卓服务被android V 2.3(姜饼)杀死

时间:2012-08-13 06:55:52

标签: java android android-service android-2.3-gingerbread

我有一项GPS服务,其工作是将坐标提取到服务器中。该服务假设全天候运行。但它在某种程度上被杀死了。 这只是在android v 2.3中讨价还价。在android v2.2上运行正常。

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

那么做什么,通过服务24/7运行。

2 个答案:

答案 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);
    }