2012-12-19 6 views
1

처음 화면에 위젯을 추가하면 오류없이 작동하고, 위젯의 버튼을 클릭하여 작업에 들어가 닫습니다. 위젯 업데이트하고 여기에이 오류를실패한 바인더 트랜잭션으로 인해 Appwidget을 업데이트 할 수 없습니다.

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

RemoteViews에 setter (예 : setProgressBar)를 호출하면 뷰를 직접 변경하지 않습니다. 대신, 이러한 chages (작업이라고 함)의 순서를 저장하고 통지 또는 위젯 관리자에게 보내도록 일련 화합니다.

정적 변수를 사용하여 RemoteViews 객체를 저장하면 remoteViews을 업데이트 할 때 remoteView와 연관된 동작 목록이 무한대로 커집니다. 이것은 일련 화 된 remoteViews의 크기가 바인더 트랜잭션의 최대 페이로드 크기 인 1Mb에 도달하면 중지됩니다.

작업 목록을 지우거나 중복 제거 할 방법이 없으므로 RemoteViews을 다시 만들면 해결됩니다.