2012-01-06 54 views
0

我有一個可以減少時間的小部件。 這是在主屏幕上,它似乎工作正常,而我留在主屏幕上, 但是當我切換到另一個屏幕一段時間,然後回到家,小部件開始滯後。Android小部件在未顯示時不更新

它似乎不會更新,而我在其他屏幕上,導致時間不更新,現在它執行所有更新,一起計算倒計時時間。這會導致滯後和短暫的電話凍結(當我每分鐘更新一次時)。如果我想每秒更新一次 - 在大約20分鐘的屏幕鎖定時間或其他失焦操作後手機完全凍結。

問題:我是否可以隱式地告訴小部件繼續更新,無論它是否顯示在屏幕上?或者如何解決這個問題?

+0

如何保持視線不重點的時間。 – 2012-01-06 09:07:15

+0

實際上,這並沒有像我這麼關注這個事實,即它在獲得焦點之後似乎會調用它所錯過的所有更新,而不僅僅是一個(最後一個) – 2012-01-06 09:11:50

+0

我只問,因爲我以爲可以把它系統時間在小部件失去焦點的時候,然後在重新聚焦時重新採用它,做一點數學計算,並讓你的時間像這樣......它只是一個想法,我不知道細節以及如何你的代碼看起來像但它可能節省必須在後臺一直使用增量更新。 – 2012-01-06 09:15:20

回答

0

View.OnFocusChangeListener

林猜你可以用它來監視你的部件是否是焦點與否。在Google文檔上查看它。我還沒有使用它自己,所以林不知道它會工作,但它絕對值得一試。

http://developer.android.com/reference/android/view/View.OnFocusChangeListener.html 
0

這是一個糟糕的整體設計 - 如果你必須計算每一個「滴答」,並有它發生在那個時候,一個服務可能是做這項工作的最好的東西,只是有小部件詢問服務什麼它應該顯示。

但是...你會吸電池的東西很糟糕。它是否真的需要在每個勾號上做些什麼,或者你能保存最後的抽籤時間,找到當前的時間,然後相應地更新,跳過所有的勾號?

如果遇到零時需要發生的事情,請嘗試使用android報警系統。用戶的電池壽命和CPU的使用方式會有所不同。

0

我不確定你是否這樣做,但你必須使用AlarmManager類來更新你的小部件。不要使用任何線程或可能導致延遲的事情。 我用它,它爲我工作。 See this