2015-01-20 2 views
0

Из всех примеров кода, которые мы хотим вызвать #unbindService (в том же контексте), мы видим, если мы вызвали #bindService, который выполняется с помощью булевой проверки.Нужно ли мне идеально сочетать вызовы bindService/unbindService?

Но аналогичных проверок в вызове #bindService нет, т. Е. Мы не проверяем, не связаны ли мы прежде, чтобы избежать двойного связывания.

Так мои вопросы -

  1. «будут плохие вещи случаются», если я связываю услугу несколько раз, но только отвязать один раз, или это только плохо, если я связать один раз и отвязать несколько раз? Такая асимметрия кажется мне странной, но хотелось бы узнать, знает ли кто-нибудь ответ. Я сейчас играю с этим, пытаясь понять это, но предпочел бы «официальный» ответ от более опытных разработчиков.
  2. Что считается операцией «привязка» и «несвязанная» - это факт, что я просто вызвал API #bind (или #unbind), и те вызовы должны быть сопряжены, OR является границей/несвязанное состояние, указанное # onServiceConnected/Disconnected callback, которое должно быть сопряжено? Собственные примеры Google, похоже, указывают на то, что первое верно, может ли кто-нибудь подтвердить? Если прежнее значение истинно, то последний более тонкий вопрос: если #bindService возвращает false, т. Е. Андроид даже не попытается подключиться, поскольку он не может разрешить службу, в этом случае безопасно вызывать #unbindService?

спасибо.

+0

Как вы можете связать дважды (или более) с тем же сервисом? – pskink

+0

Да, я видел документацию, и это не совсем отвечает на мои вопросы. Кажется, что вы МОЖЕТЕ связываться дважды с тем же соединением, даже если это «не имеет смысла». Это одна из причин, почему я задаю этот вопрос. Я искал формальные контракты вокруг этих методов, поэтому я могу создать надежное приложение, а не просто общее руководство по использованию примера. Как всегда, документ google очень поверхностный, а не подходящий контракт. Бывают ситуации, когда вы не можете получить идеальные пары подключения/отключения в моем приложении, и я хочу лучше понять, как их обрабатывать. – Creos

+0

, даже если вы вызываете bindService с тем же ServiceConnection, несколько раз onServiceConnected вызывается только один раз, что указывает на то, что второй вызов и последующие вызовы не являются операциями, а один unbindService будет выполнять работу – pskink

ответ

0

Я сомневаюсь, что Android позволяет связываться с одним и тем же сервисом несколько раз, но это не имеет смысла.

Вы связываетесь с сервисом и получаете объект Messenger. В следующий раз, когда вы проверите, если посланник имеет значение null. Если нет необходимости связывать снова. Как только ваша деятельность заканчивается, а посланник не равен нулю, вы отвязываете.

Подробности: here.

+0

Да, я видел документацию, и это не совсем отвечает на мои вопросы. Кажется, что вы МОЖЕТЕ связываться дважды с тем же соединением, даже если это «не имеет смысла». Это одна из причин, почему я задаю этот вопрос. Я искал формальные контракты вокруг этих методов, поэтому я могу создать надежное приложение, а не просто общее руководство по использованию примера. Как всегда, документ google очень поверхностный, а не подходящий контракт. Бывают ситуации, когда вы не можете получить идеальные пары подключения/отключения в моем приложении, и я хочу лучше понять, как их обрабатывать. – Creos

+0

также неверны примеры Google.Действительно, если быть точным, вам не следует просто устанавливать переменную «isBound» в true, вы должны посмотреть на возвращаемое значение #bindService, чтобы система даже попыталась вызвать обратный вызов, так что в полученной вами ссылке уже есть ошибка , Опять же, это было целью моего вопроса, я думаю, что его увольняют, не будучи полностью понятым ... нисходящее также глупо – Creos

 Смежные вопросы

  • Нет связанных вопросов^_^