AppWidget:如何在更新之间保留静态对象?

时间:2010-11-01 22:54:39

标签: android android-widget

我正在创建一个由AppWidget组成的ImageView,其中包含一个自定义渲染位图。此小部件每分钟刷新一次(使用AlarmManager)。

所有渲染和存储都在AppWidgetProvider

中完成

作为一个好公民,我想最大限度地降低CPU使用率等,因此我将Paint个对象和其他预先计算的值存储在AppWidgetProvider的静态字段中。

然而,事实证明,我的AppWidget过程非常渴望死在我身边,因为这些孩子一无所获。我理解这是标准行为。然而,随着它的悲惨死亡,它也将我珍贵的静态物品带入坟墓,永远不会被再次看到,这样不太方便。

我的哀悼没有解决任何问题,所以我想知道:有没有办法解决这个问题?或者是没有办法做到这一点,我是否应该重新开始重新初始化每一次重绘?

3 个答案:

答案 0 :(得分:1)

不是真正的解决方案,但我通过不缓存所有内容来解决它。

答案 1 :(得分:1)

我正在做类似的事情 - 创建一个时钟小部件 - 并且发现它甚至比你想象的更糟糕。 Android不仅仅是在厌倦了它的时候杀死AppWidgetProvider。它立即杀死它并为每次更新重新创建它(如构造函数中的print语句所示)。

如果你像我一样正在做一些记忆密集的事情,比如把相当重的物体画到相当重的屏幕外位图上,这就是一个问题。

我能为您提供的最佳解决方案是尝试以更持久的方式处理对象的维护和存储 - 例如,配置活动或服务。但是,对于Paint对象来说,似乎有点过分了。

答案 2 :(得分:0)

我不确定您正在做什么样的预先计算,或者保存了什么类型的数据,但Android会告诉您什么时候要杀死您的AppWidget。您可以将其用作某种持久性商店的机会。您仍然需要对序列化/反序列化数据进行一些处理,但它可能比重新计算更快。