2013-09-24 2 views
1

У меня есть служба, которая отправляет обновления gps каждые 15 минут. Проблема заключается в том, что однажды я уничтожу свою службу и запустил ее снова, сейчас работает служба 2, когда я ожидаю только 1. предыдущая служба выполняется снова, когда я ее уже остановил и начал новую. Для получения дополнительной информации, вот как я создаю свой сервис.Сервис создается дважды после уничтожения

Я запустить службу по методу на нажатие кнопки:

startService(i); 

Вот моя служба:

@Override 
public void onCreate() { 
    // TODO Auto-generated method stub 
    super.onCreate(); 
    intent = new Intent(BROADCAST_ACTION); 
    powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE); 
    wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, 
      "MyWakeLock"); 
} 

@Override 
public void onStart(Intent intent, int startId) { 
    handler.removeCallbacks(sendWakeLock); 
    handler.postDelayed(sendWakeLock, 1000); // 1 second 
    Log.i("onStart", "onStart"); 
} 

@Override 
public void onDestroy(){ 
    super.onDestroy(); 
    Log.i("onDestroy", "onDestroy"); 
} 

private Runnable sendWakeLock = new Runnable() { 
    public void run() {  
     try 
     { 
      if(!stopSend) 
      { 
       sendGPSUpdate(); 
      } 
     } 
     finally 
     { 
      if(wakeLock != null) { 
       if(wakeLock.isHeld()) { 
        wakeLock.release(); 
       } 
       wakeLock = null; 
      } 
     } 
     handler.postDelayed(this, 900000); 
    } 
}; 

private void sendGPSUpdate() 
{ 
    sendBroadcast(intent); 
} 

@Override 
public IBinder onBind(Intent arg0) { 
    // TODO Auto-generated method stub 
    return null; 
} 

Тогда назад на моей деятельности, я нажимаю другую кнопку, которая закрывает приложение, я делаю это:

stopService(i); 
finish(); 

Просто добавить, у меня есть вразброс:

приемник
private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      Log.i("Broadcast", "Recieved!"); 
      UpdateCurrentLocati on(); 
      if(BGService.wakeLock == null) { 
       PowerManager powerManager = (PowerManager)context.getSystemService(Context.POWER_SERVICE); 
       BGService.wakeLock = powerManager.newWakeLock(
         PowerManager.PARTIAL_WAKE_LOCK, 
         "Tag"); 
      } 
      if(! BGService.wakeLock.isHeld()) { 
       BGService.wakeLock.acquire(); 
      } 
     } 
}; 

Еще раз, когда я запустить приложение и снова запустить службу, как я уже сказал, у меня две запущенные сервисы, которые посылают GPS обновления. Кстати, это фоновый процесс. Есть идеи? Благодаря!

+0

Если вы должны использовать эту службу только до тех пор, как активность продолжается, то почему бы не использовать «Связанная служба»? http://developer.android.com/guide/components/bound-services.html –

+0

Это первый вариант, который я использовал, так как считал, что stopService будет достаточно. – ljpv14

+0

как вы решаете эту проблему. Я тоже застрял на нем –

ответ

1

я не видел реализацию onStartCommand в вашем коде, я использовал его в следующем порядке:

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
startRecording();// start audio capture in the background 
return Service.START_STICKY;// maybe you should use START_NOT_STICKY or IntentService 
} 

Я остановился и начал этот сервис несколько раз без удвоения или любой другой проблемы. Есть и другие варианты, например, ваша служба будет автоматически перезапущен на ОС Android, если он останавливается, вы можете обратиться к документации здесь: http://developer.android.com/reference/android/app/Service.html#START_STICKY

Edit: Когда мы называем StartService, вызов onStartCommand сделан. Если вы вызываете startService несколько раз, может быть, более одного потока, основанного на методе sendWakeLock.

+0

В чем разница onStart и onStartCommand? – ljpv14

+0

onStart устарел на уровне API 5, то есть Android 2.0. В официальном документе говорится, что вместо этого вы должны использовать onStartCommand. См. Ссылку ниже :) http://developer.android.com/reference/android/app/Service.html#onStartCommand(android.content.Intent, int, int) –

+0

Изменено на onStartCommand. Все еще испытывает ту же проблему. – ljpv14

0

вобще service.stop ..... перед тем service.start .....

+0

Как я уже говорил. Не работает для меня. – ljpv14

Смежные вопросы