【问题标题】:Appwidget can't update because of Failed Binder transaction由于失败的 Binder 事务,Appwidget 无法更新
【发布时间】:2012-12-06 17:48:09
【问题描述】:

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

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

代码有问题吗?

【问题讨论】:

    标签: android android-widget appwidgetprovider


    【解决方案1】:

    我猜 Widget4x2.remoteViews 是一个静态变量。可能是静态变量没有赋值,或者没有正确启动。

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-01-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-13
        • 1970-01-01
        • 2014-07-29
        • 2018-01-31
        相关资源
        最近更新 更多