应用程序小部件无法更新,因为绑定程序事务失败



当我第一次在屏幕上添加小部件时,它没有错误,然后当我单击小部件上的按钮以进入活动并将其关闭时。小部件停止更新并显示此错误

12-19 19:14:52.370: E/JavaBinder(14805): !!! FAILED BINDER TRANSACTION !!!

这是我的代码:

Widget4x2.remoteViews.setProgressBar(R.id.widget_progressbar, 100, (int)(NowPlayingService.progress * 100), false);
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(Widget4x2.context);
appWidgetManager.updateAppWidget(new ComponentName(Widget4x2.context,Widget4x2.class), Widget4x2.remoteViews);

代码有任何问题?

我猜widget4x2.remoteviews是一个静态变量。它可能尚未分配静态变量,或者未正确启动。

当您在RemoteViews上调用setter(例如setProgressBar)时,它不会直接呼唤视图。取而代之的是,它存储了此类插曲的序列(称为操作),并将它们序列化以将其发送到通知或小部件管理器。

当您使用静态变量存储RemoteViews对象时,随着您更新remoteViews,与远程视图关联的操作列表会无限地增长。当序列化remoteViews的大小达到1MB时,这停止了,这是粘合剂事务的最大有效载荷大小。

没有办法清除或重复删除操作列表,因此重新创建RemoteViews是一种解决方案。

相关内容

最新更新