У меня есть поток из пула потоков в службе, который выполняет довольно много вещей. В конце он вставляет некоторые данные в провайдер и отправляет широковещательную рассылку для уведомления GUI о новых данных.
Довольно часто отправляются и принимаются 1-3 трансляции, затем больше не поступает трансляция. Когда я смотрю на потоки stacktrace, все они сидят в системных методах sendBroadcast.
Stacktrace из никогда не возвращающихся потоков:
BinderProxy.transact(int, Parcel, Parcel, int) строка: недоступна [собственный метод]
Строка ActivityManagerProxy.getProviderMimeType(Uri): 3296
ContextImpl $ ApplicationContentResolver (ContentResolver).getType(Uri): 231
Строка Intent.resolveType(ContentResolver): 3754
Intent.resolveTypeIfNeeded(ContentResolver): 3776
ContextImpl.sendBroadcast(Intent): 969
Приложение (ContextWrapper).sendBroadcast(Intent): 301
Регистрация ресивера:
<receiver android:name=".gui.MeasurementReceiver">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<data android:scheme="content" android:host="compy.product.providers.measurement"/>
</intent-filter>
</receiver>
Передача широковещания:
context.sendBroadcast(new Intent(android.content.Intent.ACTION_VIEW).
setData(Uri.withAppendedPath(compy.content.Intent.URI_channel, ""+id )));
Теперь для настоящей забавной части вышеизложенное работает без проблем на Galaxy Nexus с ICS и на Galaxy Note pre ICS. Но это не удается описанным образом в Galaxy Note, Galaxy SII и Galaxy SIII с ICS.
Возможно, связанная с этим заметка о Galaxy Nexus провайдер запускается один или два раза. На проблемных телефонах он запускается для всех запросов. Мы также не нашли причин для такого поведения.
Есть идеи?
Хорошо, это оказалось очень просто....
Мы дважды зарегистрировали ContentProvider в файле Mainfest...
Поэтому, если у вас есть сумасшедшие ошибки, проверьте свой манифест. Я понятия не имею, почему это нарушило трансляцию.
Дополнительная информация (изменить):
Определить хвост этой проблемы - "Загрузка провайдера" вашего имени класса "в LogCat в большинстве случаев, когда вы пытаетесь выполнить операцию в Провайдере. В противном случае это будет довольно редкое сообщение. Мы только нашли пару ссылок на него в сети.
Поэтому связанная с этим нота в конце концов была самой важной....