2010-08-20 2 views
4

Я все еще работаю над своим программным обеспечением Android для Android. У меня есть класс AlarmService, который запускает уведомления и уведомления о близости. Я начинаю эту услугу с:Как остановить несколько экземпляров службы Android?

startService(intentAlarmService); 

Я пытаюсь остановить службу с помощью:

Intent intentAlarmService = new Intent(this, AlarmService.class); 
stopService(intentAlarmService); 

Это то, что происходит: Служба останавливается, но потом, когда я начинаю еще один экземпляр службы (т.е. выйти из приложения, запустить приложение, запустить службу). Я обнаруживаю (через Toasts), что предыдущие экземпляры службы все еще запущены. Например, в классе AlarmService существует LocationListener с методом onLocationChanged. Таким образом, в этом методе, я ставлю:

Toast.makeText(AlarmService.this, "AlarmTitle: " + mAlarmTitle, Toast.LENGTH_SHORT).show(); 

И когда я вновь запустить службу, Тосты продолжают появляться с предыдущим AlarmTitles, и током AlarmTitle.

Итак, что-то не работает, когда я пытаюсь остановить AlarmService - что это может быть?

Примечание: при повторной установке приложения служба прекращает свое существование. Затем, когда я запускаю службу, только ток AlarmTitle отображается в Toast (я хочу, чтобы это происходило каждый раз).

С моим сервисом что-то не так. Любые идеи, что я могу сделать?

спасибо.


КОД ОТ МОЕГО APP:

public void onDestroy() { 
    super.onDestroy(); 

    Intent alarmIntent = new Intent(getApplicationContext(), AlarmReceiver.class); 

    PendingIntent pendingIntentAlarm = PendingIntent.getBroadcast(getApplicationContext(), PENDING_INTENT_REQUEST_CODE1, alarmIntent, PendingIntent.FLAG_CANCEL_CURRENT); 

    pendingIntentAlarm.cancel(); 

    Intent intentAlarmService = new Intent(getApplicationContext(), AlarmService.class); 

    stopService(intentAlarmService); 

    mNtf.cancel(NOTIFICATION_ID1); 
    mNtf.cancelAll(); 
} 

ответ

6

я обнаруживаю (через Тосты), что предыдущие экземпляры службы по-прежнему работает.

Я предполагаю, что вы протечки услуги, вероятно, не сумев вызвать removeUpdates() отделить свой LocationListener. Существует только одна настоящая работающая копия службы (с точки зрения жизненного цикла Android), но вы не позволяете другим службам быть мусором, собранным через вашу утечку.

Кроме того, пожалуйста, замените все вхождения getApplicationContext() на this.

+0

Я еще немного новой для программирования Android. Я знаю, какие утечки памяти, но что подразумевается под «утечкой услуг»? Можете ли вы предложить еще несколько объяснений с точки зрения того, что кажется неправильным с моим приложением? Спасибо, и я сожалею о появлениях getApplicationContext(). –

+0

@ Ясир Маланг: Я считаю, что вы вызываете 'registerLocationUpdates()' и не вызываете 'removeUpdates()'. – CommonsWare

+0

Благодарим вас за помощь. Я просмотрел свой код, и я нашел 3 отдельных реализации класса LocationListener. Я сделал это, потому что я не знаю, как получить доступ к 1 публичному классу из другого класса. Как бы вы написали код, чтобы сделать 1 общедоступный класс LocationListener, а затем наследовать другие классы? –

0

тест это:

private Boolean Tb = true; 
if(condition) 
{ 
    if(Tb) 
    { 
    Toast.makeText(getApplicationContext(),"content...", Toast.LENGTH_LONG).show();    
    } 
Tb =false; 

final Handler handler = new Handler(); 
    handler.postDelayed(new Runnable() { 
    @Override 
      public void run() { 

      Tb =true; 
     } 
     }, Toast.LENGTH_LONG); 

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