AppWidget不可靠时调用updateAppWidget更新()(AppWidget does

2019-10-18 17:34发布

我创建于Android AppWidget的一个相当常见的情况。

  • 的AppWidgetProvider调用onAppWidgetOptionsChanged()伸缩部件)和onUpdate()定时)
  • 从这些方法我开始一个IntentService 。 从案例来选择改变了我通过新尺寸的意图。
  • 服务接触web服务,构建RemoteViews并调用updateAppWidget()

我的主要测试设备是运行库存4.3的Nexus 7(2012)(股票启动器)

窗口小部件不使用RemoteViewFactory并没有用户AlarmManager。 这是在XML定义的固定时间的静态视图。

它的工作原理时代最,但有时通话updateAppWidget()完全由启动忽略,没有更新发生在屏幕上。 如果我强行关闭发射器,将其清除缓存和重新大小的窗口小部件(强制更新),那么它更新。

我相信有事情做与更新频率,因为我在IntentService欺骗了一些东西,每当它的调整,只能打电话到最后的意图(当用户停止与小部件搞乱),它柔化了一下这个问题。

让我们展示一些简单的代码(这是非常标准的,我相信):

public class AlbumWidgetService extends WidgetUpdateIntentService {

   @Override
   protected void onHandleIntent(Intent intent) {
       // get's widgetID or array of IDs and pass to 'doTheJob'
   }

   private void doTheJob(int appWidgetId, int heightInDp, int widthInDp) {

      // ...
      // here goes code with pre calculations and get data
      // ...

      // create Intent and PendingIntent with some extras
      Intent intent = ... etc
      PendingIntent pi = PendingIntent.getActivity( ... etc

      // get url for some images    
      List<String> imageFilenames = getImagesFilename(albumId, totalImages);

      // Create the remote view
      RemoteViews views = new RemoteViews(getPackageName(), R.layout.album_widget);

      // ...
      // here goes a bunch of code that load bitmaps from the URLs
      // set text and colors in the remote view
      // put ImageViews into the remote view, etc
      // ...

      try {
         AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(this);
         appWidgetManager.updateAppWidget(appWidgetId, views);
         Log.d(this, "Updating the widget id " + appWidgetId);
      } catch (Exception e) {
         // this exception happens if the RemoteView is too big, have too many bitmaps.
         // I'm already minizing this to happen with the pre calculations, but better safe than sorry
         Log.e(this, "Failed to update the widget id " + appWidgetId, e);
      }
   }

正如我所说,这件事主要是工作(我可以看到日志,我可以看到屏幕上的结果,但在每一次,而它并没有调整大小后更新,甚至你可以看我的日志,并没有崩溃或任何东西。

想法?

文章来源: AppWidget does not reliably update upon call updateAppWidget()