Я пишу простой виджет с ListView. Я хотел получить мгновенные обновления изменений данных, созданных таким образом ContentObserver. Я регистрирую его в классе потомков RemoteViewFactory.ContentObserver перестает работать через некоторое время
@Override
public void onCreate() {
Uri uri = Uri.parse("content://mms-sms/conversations");
final String[] projection = new String[]{"*"};
_dataCursor = _context.getContentResolver().query(uri, projection, null, null, "date DESC");
if(_smsObserver == null) {
_smsObserver = new SmsObserver(new Handler(), _context);
}
_context.getContentResolver().registerContentObserver(uri, true, _smsObserver);
}
ContentObserver является незарегистрированным в одном классе:
@Override
public void onDestroy() {
if(_dataCursor != null && !_dataCursor.isClosed())
{
_dataCursor.close();
}
if(_smsObserver != null) {
_context.getContentResolver().unregisterContentObserver(_smsObserver);
}
}
Это прекрасно работает в течение некоторого времени, mayby несколько часов, но после того, как ночью, ContentObserver перестает работать, и мой App Widget не получает обновления. В OnChange
нет расширенного кода.
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
Intent smsIntent = new Intent(_context, SmsWidget.class);
smsIntent.setAction(SmsWidget.RELOAD_ACTION);
PendingIntent pendingIntent = PendingIntent.getBroadcast(_context, 0, smsIntent, PendingIntent.FLAG_UPDATE_CURRENT);
try {
pendingIntent.send();
} catch (PendingIntent.CanceledException e) {
e.printStackTrace();
}
}
Я тестирую свой виджет приложения на устройстве с Android 4.4.2.
Я попытался пошевелиться регистрации и отмены регистрации в ContentObserver от RemoteViewsFactory
самой AppWidgetProvider
к OnEnabled()
и OnDisabled()
методов. К сожалению, это не сработало, как должно. Примерно через 8 часов ContentObserver должен быть незарегистрирован, так как мой AppWidget перестает получать обновления.