Создание и получение sqlitedatabase объекта является асинхронным иногда, но мы не можем угадать, когда это будет асинхронно.
Вопрос 5
Запустить сервис из активности и закрыть активность, при этом, что произойдет с этим сервисом, будет ли он жив или мертв?
Сервис также будет убит.
Сервис будет жив в течение некоторого времени и будет убит Android сборщиком мусора.
Сервис будет работать вечно, никто не сможет остановить его сейчас, и будет утечка памяти.
Сервис будет продолжать работать в фоновом режиме, но это он может остановить себя сам, когда выполнит работу. Или другие компоненты также могут убить его, используя stopService (), или Android может также убить сервис в случае нехватки памяти.
Вопрос 6
Какая функция реализуется в классе bound service?
onCreate ()
onBind () и onUnbind ()
ServiceConnectionListener на клиентской стороне.
Все перечисленное.
Вопрос 7
Как обновить пользовательский интерфейс из сервиса, который имеет потоки?
Создать поток в классе сервиса и иметь непосредственный доступ к компонентам пользовательского интерфейса вашей активности.
Так как обновление интерфейса из другого потока непосредственно не представляется возможным, создать коммуникацию с главным UI потоком для обновления пользовательского интерфейса.
Использование Intent Service.
Все перечисленное.
Вопрос 8
Как запустить сервис с приоритетом переднего плана?
Сервис всегда работает в фоновом режиме, так как он не имеет пользовательского интерфейса, так что это не возможно.
startService (intent, boolean foreground); передать второй параметр true, чтобы сделать этот сервис с приоритетом переднего плана.
Установить приоритет сервиса в <service> теге в файле манифеста. если приоритет отличается от 0, тогда сервис будет на переднем плане.
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.
3. Реализовать функции этого внутреннего класса.
4. Возвратить объект этого внутреннего класса из onStartCommand ().
1. Создать сервис, реализовать оnCreate (), onBind (), onUnbind (), оnDestroy ().
2. Создать внутренний класс в классе сервиса, который расширяет класс Binder.
3. Реализовать функции этого внутреннего класса.
4. Возвратить объект этого внутреннего класса из onBind ().
Вопрос 16
Для реализации фоновой функциональности активности, что лучше, запустить сервис или поток?
Вы можете использовать оба, потому что оба будут делать то же самое.
Если фоновая функциональность связана с активностью, использовать поток. Если нет, запустить сервис с потоком в нем.
Имеет ли фоновая функциональность связь с активностью или нет, всегда лучше воспользоваться сервисом с потоком, а не активностью с потоком.
Если вы хотите некоторую фоновую функциональность в активности, используйте поток, нет необходимости в сервисе.
Вопрос 17
Можно ли создать сервис без какого-либо потока?
Да, вы можете иметь сервис, запущенный в главном потоке.
Нет, сервис должен иметь поток, он не может работать в главном потоке.
Да, вы можете иметь сервис, запущенный в главном потоке, только если вы не имеете какой-либо активности в главном потоке.
Поток и сервис не связаны.
Вопрос 18
Что произойдет, если вы запустите сервис без потока, как будет работать тяжелая функциональность?