【问题标题】:How can I prevent my widget from re-updating every time the device's orientation is changed?每次更改设备的方向时,如何防止我的小部件重新更新?
【发布时间】:2013-10-08 13:56:07
【问题描述】:

我有一个 Android 小部件,它通过 onUpdate 方法发出相当多的网络请求。我的小部件预计每天刷新一次。它总是使用AsyncTask 绘制非常重的Canvas

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

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

【问题讨论】:

  • 缓存数据和上次更新时间。仅在经过一定时间后才更新,否则使用缓存的数据。

标签: java android android-widget


【解决方案1】:

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

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

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

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

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

或者,完全忽略onUpdate() 调用,如果它为时过早并且您确信主屏幕没有以某种方式丢失您之前的@​​987654323@。就个人而言,我会使用缓存的内容重新生成RemoteViews,以防某些主屏幕实现丢弃了您之前的@​​987654325@(例如,进程被终止并重新启动)。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-28
    • 2021-10-02
    • 1970-01-01
    • 1970-01-01
    • 2019-05-02
    • 1970-01-01
    • 2011-07-30
    • 2013-02-05
    相关资源
    最近更新 更多