У меня есть виджет приложения, отображающий таймеры. Таймеры могут быть запущены, остановлены или возобновлены.
На Android 8 таймеры иногда не отмечаются (50/50). Некоторые пользователи жаловались на проблему на Android 7, но я не совсем уверен, что это та же проблема. Все работает хорошо на Nexus 5 с установленным Android 6. Если просмотреть список вниз (пока хронометр невидим) и прокрутка вверх - таймер начнет тикать. Если я поставлю еще один Chronometer над ListView и запустим - хронометр будет хорошо гадать
ActivitiesRemoteViewsFactory
public RemoteViews getViewAt(int position) {
...
RemoteViews remoteViews = new RemoteViews(mContext.getPackageName(), getItemLayoutId());
if (timeLog.getState() == TimeLog.TimeLogState.RUNNING) {
remoteViews.setChronometer(R.id.widget_timer,
SystemClock.elapsedRealtime() - (duration * 1000 + System.currentTimeMillis() - timeLog.getStartDate().getTime()), null, true);
} else {
long timerValue = SystemClock.elapsedRealtime() - duration * 1000;
remoteViews.setChronometer(R.id.widget_timer, timerValue, null, false);
}
return remoteViews;
Обновление отправляется из метода AppWidgetProvider onReceive
public void onReceive(Context context, Intent intent) {
AppWidgetManager widgetManager = AppWidgetManager.getInstance(ctx);
...
widgetManager.notifyAppWidgetViewDataChanged(appWidgetIds, R.id.widget_activities_list);
}
TargetSDK - 25
ОБНОВЛЕНИЕ Проблема также воспроизводится в основном приложении. Что-то не так с ListView, как хорошо работает в RecyclerView. Добавлен простой пример, воспроизводящий проблему на странице https://github.com/zaplitny/WidgetIssue.