0

onUpdate我有一个 Android 小部件,它在它的方法中发出相当多的网络请求。我的小部件预计每天刷新一次。它总是Canvas使用AsyncTask.

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

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

4

1 回答 1

1

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

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

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

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

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

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

另外,请使用IntentService,而不是AsyncTask,来处理长时间的onUpdate()工作。否则,一旦onUpdate()返回,您的进程就不会保留在内存中,并且您的进程可能会在您的工作完成之前终止。

于 2013-10-08T14:06:12.603 回答