Блокировка вызова SendBroadcast из потока ThreadPool

1

У меня есть поток из пула потоков в службе, который выполняет довольно много вещей. В конце он вставляет некоторые данные в провайдер и отправляет широковещательную рассылку для уведомления 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 провайдер запускается один или два раза. На проблемных телефонах он запускается для всех запросов. Мы также не нашли причин для такого поведения.

Есть идеи?

Теги:
android-intent

1 ответ

1
Лучший ответ

Хорошо, это оказалось очень просто....

Мы дважды зарегистрировали ContentProvider в файле Mainfest...

Поэтому, если у вас есть сумасшедшие ошибки, проверьте свой манифест. Я понятия не имею, почему это нарушило трансляцию.

Дополнительная информация (изменить):

Определить хвост этой проблемы - "Загрузка провайдера" вашего имени класса "в LogCat в большинстве случаев, когда вы пытаетесь выполнить операцию в Провайдере. В противном случае это будет довольно редкое сообщение. Мы только нашли пару ссылок на него в сети.

Поэтому связанная с этим нота в конце концов была самой важной....

Ещё вопросы

Сообщество Overcoder
Наверх
Меню