Используйте флаг 0 или BIND_AUTO_CREATE для флага bindService.

Обратившись к bindService (Intent service, ServiceConnection conn, int flags)

Могу ли я знать, когда мы должны использовать 0 для flags , и когда мы должны использовать BIND_AUTO_CREATE для flags ? В документации не объясняется, что означает значение 0 для флагов.

Пример использования 0 в качестве flags

 // Start auto complete service. autoCompleteServiceIntent = new Intent(AutoCompleteService.class.getName()); startService(autoCompleteServiceIntent); bindService(autoCompleteServiceIntent, serviceConnection, 0); 

Пример использования BIND_AUTO_CREATE как flags

 mContext.bindService(new Intent("com.android.vending.billing.InAppBillingService.BIND"), mServiceConn, Context.BIND_AUTO_CREATE); 

Solutions Collecting From Web of "Используйте флаг 0 или BIND_AUTO_CREATE для флага bindService."

Для метода bindService(Intent, ServiceConnection, flag) если используется flag= Context.BIND_AUTO_CREATE он свяжет service и запустит службу, но если используется "0" , метод вернет true и не запустит службу до вызова типа startService(Intent) для запуска service . Одним из распространенных способов использования "0" является случай, когда активность для подключения к локальной службе выполняется, если эта служба запущена, в противном случае вы можете запустить службу.

Семантически используйте BIND_AUTO_CREATE если вы привязываетесь к службе, срок службы которой действителен только до тех пор, пока у нее есть клиенты, связанные с ней. Это потому, что в тот момент, когда все клиенты будут отвязаны от него, он снизится.

Не используйте BIND_AUTO_CREATE – или, может быть, я должен перефразировать: нет смысла использовать BIND_AUTO_CREATE , если вы действительно просто временно привязываетесь к службе, чтобы запросить или контролировать ее, и разумно, что эта служба будет жить после того, Сделанный. В этих случаях привязка предназначена для установления соединения, а жизненный цикл службы должен управляться с помощью startService() и stopService() (или stopSelf() в некоторых случаях).

Общепринятый пример последнего случая четко описан Google в документах по связанным службам :

«… Например, музыкальный плеер может сочтет полезным позволить его службе работать неограниченно, а также обеспечивать привязку. Таким образом, действие может запустить службу, чтобы воспроизвести какую-то музыку, и музыка продолжает воспроизводиться, даже если пользователь уходит Приложение. Затем, когда пользователь возвращается к приложению, действие может привязываться к службе, чтобы восстановить управление воспроизведением ».

В целом, я бы сказал, что использование флага действительно отличает два очень разных типа использования, а не тонко настроенные версии того же самого.