设置小部件时,我必须从主线程调用createView()
方法,否则小部件会说'Coul not load widget'并进行错误视图。
但是当用户安装了许多小部件时,加载我的启动器可能需要几秒钟的时间。 (每个最多300毫秒)。
有没有办法在主线程中创建AppWidgetHostView
?
部分代码:
AppWidgetHost lWidgetHost = new AppWidgetHost(lContext, HOST_ID);
mWidgetId = lWidgetHost.allocateAppWidgetId();
AppWidgetManager.getInstance(lContext).bindAppWidgetId(mWidgetId, info.provider);
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
AppWidgetHostView lHostView = lWidgetHost.createView(lContext, mWidgetId, info);
addView(lHostView);
lWidgetHost.startListening();
}
}
聚苯乙烯。是的,我的启动器是一个系统应用程序,并拥有执行此操作的正确权限。
答案 0 :(得分:1)
当我需要在从listview的getview启动的异步任务中创建小部件时,我就这样做了:
public class CustomHostView extends AppWidgetHostView {
boolean errorFlag = false;
@Override
protected View getErrorView() {
errorFlag = true;
return super.getErrorView();
}
然后在从另一个线程调用createview之后,您知道是否存在错误,并且需要从主线程再次调用它。根据我的经验,大约有10-20%的小部件需要主线程。
另外,我不知道您正在制作什么类型的主屏幕,但请确保您不会创建比屏幕上可以看到的更多小部件+左侧或右侧的页面,例如