У меня есть служба, которая отправляет обновления 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 обновления. Кстати, это фоновый процесс. Есть идеи? Благодаря!
Если вы должны использовать эту службу только до тех пор, как активность продолжается, то почему бы не использовать «Связанная служба»? http://developer.android.com/guide/components/bound-services.html –
Это первый вариант, который я использовал, так как считал, что stopService будет достаточно. – ljpv14
как вы решаете эту проблему. Я тоже застрял на нем –