从UI更新小部件会使UI冻结

时间:2016-01-14 07:07:09

标签: android widget

为了从我的应用中刷新我的小部件,我在AsyncTask中使用了这段代码:

// REFRESH WIDGET
int ids[] = AppWidgetManager.getInstance(MainActivity.getActivty().getApplication()).getAppWidgetIds(new ComponentName(MainActivity.getActivty().getApplication(), WidgetClass.class));
Intent intent = new Intent(MainActivity.getActivty(),WidgetClass.class);
intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);

// Use an array and EXTRA_APPWIDGET_IDS instead of AppWidgetManager.EXTRA_APPWIDGET_ID,
// since it seems the onUpdate() is only fired on that:
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, ids);
MainActivity.getActivty().sendBroadcast(intent);

除了它冻结用户界面之外,这是有效的。由于小部件中的过程需要一些时间,这会使屏幕冻结1/2秒,有时甚至更多,我想避免这种情况。

在runnable中使用它会产生相同的结果。

有没有办法在不冻结UI的情况下从应用程序更新小部件?

1 个答案:

答案 0 :(得分:0)

如果您只想更新包含许多布局和视图等的小部件TextView或整个View,那么您只需使用View.invalidate(),它就会刷新您的视图。

希望这有帮助。