我理解我的问题听起来很旧,我在SO上搜索了很多,但无法弄清楚如何解决它。
我使用“刷新”按钮创建了一个App Widget,允许用户从Internet加载信息。每当用户单击“刷新”时,窗口小部件将执行Asynctask以下载信息。
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
for (int appWidgetId: appWidgetIds) {
//update app widget
}
}
@Override
public void onReceive(Context context, Intent intent) {
if (REFRESH_LIST.equals(intent.getAction())) {
//Execute AsyncTask to download information from Internet and update widget listview
}
}
小部件工作正常,除非用户单击“刷新”并在AsyncTask仍在后台运行时旋转屏幕,然后整个小部件设置和该小部件实例的数据都将丢失。
所以任何人都遇到过同样的问题请指过我的手指。谢谢!!
答案 0 :(得分:0)
您不需要在那里使用AsynTask
。
单击小部件上的刷新按钮将向您的服务发送意图。此服务将关心从Internet更新信息以及何时完成任务以关注更新窗口小部件(再次按意图)。通过这种方式,改变方向不会破坏您的服务任务。
<强>假设:强>
我想,您将无法通过当前的实施来处理方向更改。因为系统系统在它期间简单地重新创建新的Widget。在这种情况下,AsyncTask
任务仍在运行,并将在旧窗口小部件(内存中的左侧)完成,但不适用于新窗口。
答案 1 :(得分:0)
使用此小部件一段时间后,我发现只要AsyncTask中不涉及RemoteView(我想在下载信息时显示一个ProgressBar),则小部件和AsyncTask在方向改变时应该运行良好。希望这可以帮助遇到相同问题的任何人。