2012-12-19 61 views
1

當我第一次在屏幕上添加小部件時,它沒有錯誤地工作,然後當我單擊小部件上的按鈕以進入活動並關閉它時。窗口小部件停止更新,並在這裏顯示這個錯誤Appwidget無法更新,因爲Failed Binder事務

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

是否有與代碼的任何問題?

回答

1

我猜Widget4x2.remoteViews是一個靜態變量。這很可能是靜態變量尚未分配,或者沒有正確啓動。

0

當您撥打(如setProgressBar)上的時,它不會直接查看視圖。相反,它存儲這些chages(稱爲操作)的序列並將它們序列化以將它們發送到通知或小部件管理器。

由於您使用靜態變量來存儲RemoteViews對象,因此在更新remoteViews時,與remoteView關聯的操作列表無限增長。當序列號remoteViews的大小達到1Mb時停止,這是綁定器事務的最大有效負載大小。

無法清除或刪除重複刪除操作列表,因此重新創建RemoteViews是一種解決方案。