0

我明白我的问题听起来很老,我做搜索了很多关于SO,但无法弄清楚如何解决它。的Android AppWidget与方向改变

我创建一个App的Widget与刷新按钮,其允许用户从因特网加载信息。无论何时用户单击刷新,该小部件将执行一个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

在玩这个小部件一段时间后,我发现只要RemoteViews不参与AsyncTask(我想在下载信息时显示一个ProgressBar),那么这个小部件和AsyncTask应该在改变方向时正常运行。 希望这可以帮助任何人遇到同样的问题。 – Heobien 2014-12-13 15:57:43

回答

0

那里你不需要使用AsynTask。 点击在窗口小部件刷新按钮会发出意图为你服务。该服务会关心来自互联网,当任务完成在意更新窗口小部件(再次意图)更新信息。通过这种方式,改变方向不会破坏你的任务。

假设:
我猜,你将无法通过当前的实现来处理的方向变化。由于系统系统在此期间重新创建新的Widget。在这种情况下,AsyncTask任务仍在运行,并将在旧窗口小部件(内存中的左窗格)中完成,但不适用于新窗口。

+0

感谢您的回复。实际上,我确实尝试将Internet信息更新代码放入onReceive()中,但最终会出现异常: java.lang.RuntimeException:android.os.NetworkOnMainThreadException – Heobien 2014-12-13 12:01:01