如何在每次更改设备的方向时阻止我的小部件重新更新?

时间:2013-10-08 13:56:08

标签: java android android-widget

我有一个Android小部件,它在onUpdate方法中提供了相当多的网络请求。我的小部件预计每天刷新一次。它始终使用Canvas进行非常繁重的AsyncTask绘图。

当我将设备从纵向转向横向并返回纵向时,似乎再次调用onUpdate方法,并再次发出所有重型网络请求。

如果可能的话,我可以在更改方向时阻止我的应用程序重新更新吗?

1 个答案:

答案 0 :(得分:1)

  

我的小部件预计每天刷新一次

您无法完全控制它。欢迎主屏幕更频繁地触发onUpdate()电话,无论出于何种原因。

  

如果可能的话,我可以在更改方向时阻止我的应用程序重新更新吗?

不,但正如Kuffs建议的那样,你可以减少更新过程的费用:

  • 将网络I / O的结果缓存到磁盘
  • 将位图缓存(这是我认为"非常繁重的Canvas绘图"结果)到磁盘

或者,完全忽略onUpdate()来电,如果太快,您确信主屏幕没有以某种方式丢失之前的RemoteViews。就个人而言,我会使用缓存内容重新生成RemoteViews,以防某些主屏幕实现丢弃您之前的RemoteViews(例如,流程已终止并重新启动)。

另外,请使用IntentService而不是AsyncTask来处理长期onUpdate()工作。除非onUpdate()返回,否则没有任何内容可以将您的流程保留在内存中,并且您的流程可能会在您的工作完成之前终止。