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

问题描述:

我正在创建一个由ImageView组成的AppWidget,它由自定义渲染的位图填充。此小部件每分钟刷新一次(使用AlarmManager)。AppWidget:如何在更新之间保留静态对象?

所有的渲染和存储都在AppWidgetProvider中完成。

作为一个好公民,我想尽量减少CPU使用等,所以我有我的Paint对象和其他预先计算的值存储在AppWidgetProvider的静态字段中。

但是,事实证明,我的AppWidget过程非常渴望死在我身上,当时它正在与酷酷的孩子一起闲荡。我明白这是标准行为。然而,由于它的悲惨死亡,它还将我珍贵的静态存储物体带入坟墓,永远不会再被看到,这是不太方便的。

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

+0

你不应该每分钟更新一个小部件 – Falmarri 2010-11-02 01:38:11

+1

如果你有一个非常自定义的时钟显示小部件,你应该这样做。 – Peterdk 2010-11-02 11:10:58

不是一个真正的解决方案,但我解决了它没有缓存所有的东西。

我不确定你正在做什么预先计算,或者保存了什么样的数据,但Android会告诉你它什么时候要杀死你的AppWidget。你可以使用它作为某种持久存储的机会。您在序列化/反序列化数据方面仍然会有一些处理,但它可能比重新计算更快。

+0

我正在初始化一些int []数组和一些Paint对象。当我序列化/反序列化东西时绝对不会更快。它需要保存在内存中。 – Peterdk 2010-11-02 11:12:04

我正在做类似的事情 - 创建一个时钟小部件 - 并发现它比你想像的还要糟糕。当它厌倦了AppWidgetProvider时,Android并不仅仅是在杀死AppWidgetProvider。它会立即终止并为每次更新重新创建它(如构造函数中的打印语句所示)。

这是一个问题,如果你像我一样,正在做一些内存密集型的事情,比如将相当沉重的对象绘制到相当沉重的离屏位图上。

我可以为您提供的最佳解决方案是尝试处理您的对象的维护和存储更持久的东西 - 比如配置活动或服务。虽然,看起来像涂料对象过度杀伤。