У меня есть сетевой сервис, который я хочу использовать в качестве сервиса.Это локальная служба, так как она больше не действительна после того, как процесс приложения не работает, и другие приложения не нуждаются в доступе к нему. (Или должны ...).
Я размышлял, использовать ли интерфейс IBinder с локальной ссылкойв класс и решил не делать, на данный момент.
У меня есть следующие проблемы:
- , если служба умирает, и я знаю, что это возможно во время обработки запроса, это проблемадля меня, во-первых, я видел это, процесс не умрет, пока не вернется чистый запрос (затем поток умирает), если в процессе не используется kill -9 ... потом я не уверен, что android делает ссоединения.Я не уверен, какой подход я должен использовать здесь (это будет верно, хотя, даже если это был локальный поток, а не служба ...)
- , если я хочу, чтобы служба прослушивала обратный вызови вызовите его, как только закончится сетевая обработка, я нахожусь в проблеме, никакие экземпляры не могут быть переданы с использованием Intents.Поэтому мне нужны некоторые другие решения, и все они мне кажутся плохими: A. используйте IBinder, чтобы получить экземпляр класса сетевого обслуживания, затем я могу вызвать один из его методов и передать экземпляр, это будет работать, так как все онизапустить в том же процессе, НО требует от меня использовать Async способ получить экземпляр сети, который не очень подходит для меня.B. Используйте статический член в Сервисе, к которому я могу получить доступ, тогда для чего мне нужен сервис?C. использовать намерение для отправки параметров только службе, служба будет составлять из нее запрос и помещать его в очередь, а затем по завершении отправит ответ, используя намерение, которое будет инкапсулировать ответ (который может быть длинным!) Итакже будет содержать имя вызывающего класса в виде строки, поэтому все получатели будут знать, если это для них или нет - БОЛЬШИЕ издержки инкапсуляции данных в Intent и поиск во всех получателях правильного, чтобы получить ответ.
Я не хочу использовать сервис в качестве локального запущенного простого потока, так как боюсь, что если я запусту его в корневом действии, мне придется использовать статический контейнер, чтобы он был виден в каждомактивность и если по какой-то причине рут будет уничтожен, потребуется все обслуживание с ним, даже если я запускаю новое задание, а процесс еще жив ...
У кого-нибудь есть хорошие идеи о том, как подойтиэта вещь?