Шрифт:
startForeground (int id, Notification notification), используйте эту функцию в оnCreate вашего сервиса.
Вопрос 9
Мое приложение имеет только сервис, и мой сервис выполняет тяжелую функциональность подключения к Интернету и получения данных, должен ли я создать поток или нет? Если это так, почему?
Да потому что сервис по умолчанию, без каких-либо потоков, использует основной поток.
Да потому что, если сервис и активность работают в одном потоке, это может привести к ANR ошибке.
Нет, вам не нужно создавать поток, потому что сервис создаст фоновый поток, когда кто-то запускает сервис.
Нет необходимости создавать новый поток в сервисе, это не требуется в этом случае. Потому что сервис работает в главном потоке. Так как наше приложение не имеет какой-либо активности, все будет ОК, если запустить сервис в главном потоке.
Вопрос 10
Как передать данные от активности сервису?
Передать данные в putextras намерения и использовать setResult .
Передать данные в putextras намерения и использовать startService с этим намерением.
Сохранить данные в общую базу данных и обеспечить доступ к ним как из активности, так и из сервиса.
Все перечисленное.
Вопрос 11
Как получить доступ к прогресс бару из сервиса?
Отправить ProgressBar идентификатор с помощью intent extras и получить доступ к нему в сервисе.
Сделать индикатор как статическую переменную в активности и получить доступ к переменной в сервисе.
Если вы хотите обновить интерфейс в сервисе, вызовите динамически зарегистрированный приемник в активности из сервиса. И обновите пользовательский интерфейс из этого динамического приемника этой активности.
Поместить все элементы управления пользовательского интерфейса в общем классе и получить к нему доступ из всех компонентов.
Вопрос 12
Какие значения возвращает метод onStartCommand и когда они используются?
START_STICKY – в случае, если Android останавливает наш сервис силой, а затем перезапускает сервис, посылая нулевое намерение.
START_NOT_STICKY – в случае, если Android останавливает наш сервис силой, не перезапуская сервис, пока пользователь сам не перезапустит его.
START_REDELIVER_INTENT – в случае, если Android останавливает наш сервис силой, а затем перезапускает сервис, посылая повторно намерение.
Все перечисленное.
Вопрос 13
Как контролировать состояние подключения bound service?
Используя метод isServiceConnected , который возвращает истину, если сервис подключен.
Используя метод onServiceDisConnected , эта функция будет вызываться, если соединение нарушается.
Клиент может опрашивать сервис, доступен он или нет.
Используя класс ServiceConnection.
Вопрос 14
Предположим, мой сервис поддерживает и starting service и binding service, и в настоящее время два клиента запустили мой сервис и один клиент связался с моим сервисом. Через 5 минут клиент, который был связан с моим сервисом, отвязывается, а другой клиент останавливает мой сервис. В настоящее время мой сервис работает в памяти или выведен из памяти?
Сервис умер, но до сих пор в памяти.
Сервис мертв и выведен из памяти.
Сервис по-прежнему жив и в памяти.
Сервис все еще жив, но выведен из памяти.
Вопрос 15
Как реализовать IPC (inter process communication), используя Binder?
1. Создать сервис, реализовать оnCreate , onBind , onUnbind , оnDestroy
2. Создать файл. aidl с интерфейсными функциями.
3. Реализовать автоматический генерируемый Binder класс заглушки в сервисе.
4. Возвратить объект этого класса заглушки из onBind .
1. Создать сервис, реализовать оnCreate , onBind , onStartCommand , onUnbind , оnDestroy .
2. Создать файл. aidl с интерфейсными функциями.
3. Реализовать автоматически генерируемый Binder класс заглушки в сервисе.
4. Возвратить объект этого класса заглушки из onStartCommand .
1. Создать сервис, реализовать оnCreate , onBind , onStartCommand , onUnbind , оnDestroy .
2. Создать внутренний класс в классе сервиса, который расширяет класс Binder.