【发布时间】:2018-02-28 09:38:36
【问题描述】:
我有一个显示计时器的应用小部件。定时器可以启动、停止或恢复。
在 Android 8 上,计时器有时不计时 (50/50)。一些用户抱怨 Android 7 上的问题,但我不确定是否是同一个问题。在安装了 Android 6 的 Nexus 5 上一切正常。如果向下滚动列表视图(直到计时器不可见)并向上滚动 - 计时器开始计时。如果我在 ListView 上方再放一个 Chronometer 并启动 - 计时器运行良好
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添加了重现问题的简单示例
【问题讨论】:
标签: android listview widget chronometer