1

Я пишу простой виджет с 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 перестает получать обновления.

ответ

1

У меня возникла аналогичная проблема. Моим решением для решения проблемы является передача настроенного действия для приложения AppWidgetProvider, поскольку это приемник.

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