Как мне сохранить работу службы после завершения действия?

#android

#Android

Вопрос:

Я создаю службу… привязка конфигуратора к нему, но я хотел бы отключить конфигуратор при закрытии и оставить службу запущенной… Но когда я отключаюсь, служба останавливается сама по себе, и без отмены привязки служба выходит из строя с ошибкой об утечке соединения с сервисом… итак, что мне делать?

Я создаю службу без BIND_AUTOCREATE флага. Использование startService .

Комментарии:

1. Если вы даете -1 , по крайней мере, скажите мне, почему.

Ответ №1:

Вы должны иметь возможность запускать фоновую службу, используя intent и startService(), которая не привязана к вашей активности и не должна протекать или аварийно завершаться, я не уверен, для чего вы используете конфигуратор, поскольку я никогда не связывал службу, кроме как в вызовах AIDL, можете ли вы вместо этого передать аргументы?

Я не сторонник снижения, хотя думаю, вам нужно приложить некоторый код. Если вы прикрепите код, оставьте комментарий, и я посмотрю, смогу ли я обновить свой ответ, чтобы он помог больше.

Комментарии:

1. Конфигуратор привязывается к службе, чтобы получать статус выполняемых ею задач.

Ответ №2:

Я думаю, вам не следует привязывать службу, подойдет просто startService() . Когда вам нужно установить связь между процессом пользовательского интерфейса и процессом обслуживания, AIDL всегда готов помочь.

Обычно я использую AIDL strong binder в качестве обратного вызова для выполнения процесса обслуживания. Вы можете проверить мою библиотеку для примера: библиотека Хогвартса

Ответ №3:

Этот вопрос может быть связан с множеством разных проблем.

Я думаю, что проблема в том, что слово «запущен» при использовании со службами не имеет ничего общего с фактическим выполнением полезной работы. Служба на самом деле не «запускается». Код службы выполняется в ответ ровно на две вещи: намерения и запросы от связанных клиентов.

Ваша служба определенно не останавливается, когда вы отвязываетесь от нее. Если он был запущен, он остается запущенным. Если он не был запущен, он все еще не запущен. Я хотел бы больше узнать о том, что такое «running», чтобы он зависал, когда вы отключаете службу.

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

Комментарии:

1. Вы можете привязаться к запущенной службе без (повторного) ее запуска, просто указав 0 в качестве последнего параметра. И я это делаю. Он выходит из строя, когда я не отвязываю, и перестает работать при отвязке.

2. Правильно! Это то, что я сказал! Привязка к службе и ее запуск — это два отдельных действия. Если вы привязываетесь к нему, не запуская его, при отвязке запускать нечего. Я бы хотел увидеть трассировку стека для сбоя.