У меня в настоящее время есть Сервис, который хорошо работает, когда я запускаю его, но когда я пытаюсь остановить его с помощью 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()
метод в моем Сервисе не называют.
Есть ли что-либо еще, что я пропускаю это, я должен вставить для остановки сервиса?
Править: добавить onServiceConnected()
назван, когда stopService выполняется вместо onServiceDisconnected()
, почему это произошло бы?
Править: Добавить больше информации расценивает Привязку
Я называю bindService в onCreate () методом, и у меня затем есть releaseBind (), метод развязывает Сервис.
Вот код для того метода:
public void releaseBind(){
unbindService(this);
}
Таким образом, я предполагаю, что развязывание не является моей проблемой?
Вы не должны использовать инжектор
напрямую. Вместо этого передайте в Provider < FooClass >
. Кроме того, необходимо ввести провайдера в местах, где используется FooClass
.
private final Provider<FooClass> provider;
@Inject
public ClassWhereFooIsUsed(Provider<FooClass> provider) {
this.provider = provider;
}
.... somewhere else
FooClass f = provider.get(); // This is lazy
-121--1356920- хуже, если это
SELECT id FROM entries
WHERE
(SELECT COUNT(id) FROM anothertable WHERE something LEFT JOIN something ON...)
BETWEEN entries.max AND entries.min;
Перезаписать этот синтаксис без использования временного места хранения.
-121--2362894- Я предполагаю, что ваш вызов метода для releaseBind ()
означает, что вы ранее вызвали bindService ()
для этой службы и что releaseBind ()
вызывает unbindService ()
. Если мое предположение неверно, пожалуйста, проигнорируйте этот ответ.
Служба завершит работу после того, как все вызовы bindService ()
получили соответствующие вызовы unbindService ()
. Если связанных клиентов нет, службе также потребуется stopService ()
тогда и только тогда, когда для службы будет вызван startservice Service ()
.
Итак, здесь есть несколько возможностей:
unbindService()
и stopService ()
асинхронны, что-то может быть связано со временем, и в этом случае вы можете получить больше удачи, если позвоните stopService()
из метода ServiceConnection
onServiceDisconnected ()
Также помните, что точное время уничтожения службы зависит от Android и не может быть немедленным. Так, например, если вы полагаетесь на onDestroy ()
, чтобы служба остановила некоторые выполняемые работы, рассмотрите возможность использования для этого другого триггера (например, действия, вызывающего метод stopPingStuff ()
через интерфейс связывания услуг).
Хуже, если это
SELECT id FROM entries
WHERE
(SELECT COUNT(id) FROM anothertable WHERE something LEFT JOIN something ON...)
BETWEEN entries.max AND entries.min;
Перезаписать этот синтаксис без использования временного места хранения.
-121--2362894- Я предполагаю, что ваш вызов метода для releaseBind ()
означает, что вы ранее вызвали bindService ()
для этой службы и что releaseBind ()
вызывает unbindService ()
. Если мое предположение неверно, пожалуйста, проигнорируйте этот ответ.
Служба завершит работу после того, как все вызовы bindService ()
получили соответствующие вызовы unbindService ()
. Если связанных клиентов нет, службе также потребуется stopService ()
тогда и только тогда, когда для службы будет вызван startservice Service ()
.
Итак, здесь есть несколько возможностей:
unbindService()
и stopService ()
асинхронны, что-то может быть связано со временем, и в этом случае вы можете получить больше удачи, если позвоните stopService()
из метода ServiceConnection
onServiceDisconnected ()
Также имейте в виду, что точное время уничтожения службы зависит от Android и не может быть немедленным. Так, например, если вы полагаетесь на onDestroy ()
, чтобы служба остановила некоторые выполняемые работы, рассмотрите возможность использования для этого другого триггера (например, действие, вызывающее метод stopPingStuff ()
через интерфейс связывания услуг).
Все ли привязки закрыты?
Служба может использоваться в двух способы. Два режима не полностью раздельно. Можно выполнить привязку к службе , который был запущен с (). Например, фоновая музыка служба может быть запущена путем вызова startService () с объектом Intent определяет музыку для воспроизведения. Только позже, возможно, когда пользователь хочет осуществлять некоторый контроль над игрок или получить информацию о текущая песня, будет деятельностью установить подключение к службе; путем вызова bindService (). В случаях таким образом, stopService () не будет фактически остановить службу до последняя привязка закрыта
.