2010-11-01 100 views
1

我正在創建一個由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

回答

1

不是一個真正的解決方案,但我解決了它沒有緩存所有的東西。

0

我不確定你正在做什麼預先計算,或者保存了什麼樣的數據,但Android會告訴你它什麼時候要殺死你的AppWidget。你可以使用它作爲某種持久存儲的機會。您在序列化/反序列化數據方面仍然會有一些處理,但它可能比重新計算更快。

+0

我正在初始化一些int []數組和一些Paint對象。當我序列化/反序列化東西時絕對不會更快。它需要保存在內存中。 – Peterdk 2010-11-02 11:12:04

1

我正在做類似的事情 - 創建一個時鐘小部件 - 並發現它比你想像的還要糟糕。當它厭倦了AppWidgetProvider時,Android並不僅僅是在殺死AppWidgetProvider。它會立即終止併爲每次更新重新創建它(如構造函數中的打印語句所示)。

這是一個問題,如果你像我一樣,正在做一些內存密集型的事情,比如將相當沉重的對象繪製到相當沉重的離屏位圖上。

我可以爲您提供的最佳解決方案是嘗試處理您的對象的維護和存儲更持久的東西 - 比如配置活動或服務。雖然,看起來像塗料對象過度殺傷。