Intereting Posts
Чтение штрих-кодов с помощью android Android получает ценность от выбранного радиообмена Класс Imageloader создает папку lazylist в галерее. Как этого избежать Отключить исходные выходные данные logcat в Android Использование ServiceWorker в Кордове Как получить разделители в меню NavigationView без заголовков? Как отлаживать стили пользовательского интерфейса Android Показать вверх-кнопку в действииBar в предпочтениях подэкрана Механизм виртуализации Genymotion не найден / загрузка плагина прервана на Mac Мое текущее местоположение всегда возвращает null. Как я могу это исправить? Прослушать хроном пользовательский вкладку Аннотации уровня API Android для Android-библиотек Как установить фиксированное соотношение сторон для макета в Android Как получить доступ к локальным файлам файловой системы в эмуляторе Android? Внедрение приложения Silent Install на платформе Google Play на Android

Служба не останавливается при вызове метода stopService

В настоящее время у меня есть Служба, которая работает нормально, когда я ее запускаю, но когда я пытаюсь остановить ее, используя метод stopService, метод onDestroy не вызван.

Вот код, который я использую, чтобы попытаться остановить службу

Stop_Scan_Button = (кнопка) findViewById (R.id.stopScanButton);

stop_Scan_Button.setOnClickListener(new View.OnClickListener(){ public void onClick(View v){ Log.d("DEBUGSERVICE", "Stop Button pressed"); Intent service = new Intent(CiceroEngine. CICERO_SERVICE); releaseBind(); Log.d("Stop_Scan_Button", "Service: " + service.toString()); stopService(service); Log.d("Stop_Scan_Button", "Service should stop! "); } }); 

Правильно ли я полагаю, что при использовании stopService он вызывает метод onDestroy службы? Когда я onDestroy() кнопку остановки сканирования, метод onDestroy() в моей службе не вызывается.

Есть ли что-то еще, что мне не хватает, чтобы остановить службу?

EDIT: для добавления onServiceConnected() вызывается при запуске stopService вместо onServiceDisconnected() , почему это происходит?

РЕДАКТИРОВАТЬ: добавить больше информации о привязке

Я вызываю bindService в методе onCreate (), и затем у меня есть метод releaseBind (), отключающий службу.

Вот код для этого метода:

  public void releaseBind(){ unbindService(this); } 

Итак, я полагаю, что развязка не моя проблема?

Solutions Collecting From Web of "Служба не останавливается при вызове метода stopService"

Я собираюсь угадать, что ваш вызов метода releaseBind() означает, что вы ранее вызывали bindService() в этой службе и что releaseBind() вызывает unbindService() . Если мое предположение неверно, пропустите этот ответ.


Служба отключится после того, как все bindService() имеют соответствующие unbindService() . Если нет связанных клиентов, то услуге также потребуется stopService() если и только если кто-то вызвал startService() в службе.

Итак, здесь есть несколько возможностей:

  1. У вас все еще есть привязанные клиенты (например, другие действия), и в этом случае вы не можете остановить службу, пока не отвязаете
  2. Поскольку и unbindService() и stopService() являются асинхронными, что-то может сработать с учетом времени, и в этом случае вам может stopService() если вы stopService() из stopService() ServiceConnection

Кроме того, имейте в виду, что точное время разрушения службы до Android и может быть не сразу. Например, если вы полагаетесь на onDestroy() чтобы заставить вашу службу прекратить какую-либо выполняемую работу, подумайте об использовании для stopDoingStuff() другого триггера (например, действия, вызывающие метод stopDoingStuff() через интерфейс связующего сервиса).

Все ваши привязки закрыты?

Услуга может использоваться двумя способами. Эти два режима не являются полностью отдельными. Вы можете привязать к службе, которая была запущена с помощью startService (). Например, услугу фоновой музыки можно запустить, вызвав startService () с объектом Intent, который идентифицирует музыку для воспроизведения. Лишь позже, возможно, когда пользователь захочет осуществить некоторый контроль над игроком или получить информацию о текущей песне, будет ли действие установить соединение с сервисом, вызвав bindService (). В подобных случаях stopService () фактически не останавливает службу до закрытия последнего связывания

,

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

 public void onClick(View src) { switch (src.getId()) { case R.id.buttonStart: Log.d(TAG, "onClick: starting srvice"); startService(new Intent(this, MyService.class)); break; case R.id.buttonStop: Log.d(TAG, "onClick: stopping srvice"); stopService(new Intent(this, MyService.class)); break; } } 

И в классе услуг:

  public class MyService extends Service { private static final String TAG = "MyService"; @Override public IBinder onBind(Intent intent) { return null; } @Override public void onCreate() { Toast.makeText(this, "My Service Created", Toast.LENGTH_LONG).show(); Log.d(TAG, "onCreate"); } @Override public void onDestroy() { Toast.makeText(this, "My Service Stopped", Toast.LENGTH_LONG).show(); Log.d(TAG, "onDestroy"); } @Override public void onStart(Intent intent, int startid) { Toast.makeText(this, "My Service Started", Toast.LENGTH_LONG).show(); Log.d(TAG, "onStart"); } }