1

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

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);

代码有问题吗?

4

2 回答 2

1

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

于 2012-12-22T02:16:11.413 回答
0

当您调用 setter (like setProgressBar) on 时RemoteViews,它不会直接对视图进行更改。相反,它存储这些 chages 的序列(称为操作)并将它们序列化以将它们发送到通知或小部件管理器。

当您使用静态变量来存储RemoteViews对象时,与 remoteViews 关联的操作列表会随着您更新而无限增长remoteViews。当序列化的大小达到 1Mb 时,这将停止remoteViews,这是 binder 事务的最大有效负载大小。

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

于 2015-10-16T12:34:32.990 回答