Как намерения работают внутри страны?
Я разработал приложение, и я выполнил некоторые тесты. Эти тесты состоят в
отправка данных из одной фоновой службы на другой фон
оказание услуг.
Все данные были получены, когда скорость передачи была низкой (4 цента/сек). Однако, когда
я увеличил скорость передачи (8 и 12 intents/second), некоторые данные (обычно 2- 3%) были
не полученной службой назначения.
Все намерения транслировались, а службы выполнялись локально.
Может ли кто-нибудь сказать мне, как
ОС рассматривает намерения и работает весь механизм, чтобы найти
почему данные не были получены получателем?
С уважением,
Ответы
Ответ 1
Прежде всего, я бы рекомендовал связать службу, а затем использовать Handlers для IPC. Хороший пример можно найти здесь: http://developer.android.com/guide/components/bound-services.html Это намного быстрее и надежнее.
О том, как Intents работают внутри, вы можете посмотреть исходный код: https://github.com/android/platform_frameworks_base/blob/master/core/java/android/app/ContextImpl.java#L893
Ответ 2
Вот соответствующие методы (вы можете увидеть первый вызов, вызванный методом ContextImpl.broadcastIntent(), см. ссылку в Force answer):
Ответ 3
Одна из возможных причин заключается в том, что синхронное взаимодействие между процессами Android. Процесс вызывающего клиента блокируется на время ответа на серверный процесс. Ваша служба с таймером блокируется в течение (очень малых) периодов времени, что может привести к поведению, которое вы наблюдали.
Источник: Android Binder - Интерактивная коммуникация Android от Thorsten Schreiber, стр. 11 - 13.
EDIT. Я опубликовал ответ, потому что комментарии Криса Стреттона и Жоау Нунеса ценны.