2013-09-23 38 views
0

我創建了一個計時器,它倒計時,當它達到3時,它開始振動越來越強,直到它完全振動爲止。無論活動是否激活,都運行一個計時器

我的問題是,如果用戶關閉屏幕,定時器變得不穩定,即不可預測地倒數或根本不倒計數。在搜索了一段時間之後,我發現解決方案可能是使用AlarmManager,但對於這樣一個簡單的任務來說,這看起來非常複雜。

計時器應與活動綁定,如果設置了,則還應該發出指示剩餘時間的通知。

任何想法?

回答

0

很明顯,如果您在活動中實施它,定時器將會不穩定。它來自活動的生命週期。主要活動元素是GUI線程,它不是實現邏輯元素的最佳位置。

您應該使用報警管理器或實施自己的服務來管理在後臺正常工作的操作。你有問題,因爲當你切換你的應用程序的屏幕暫停時,直到你重新啓動它,你沒有完全控制活動內的動作。

我是使用大腦編程的粉絲,所以我給出建議,不清楚代碼。但我希望這會有所幫助。

1

有幾種選擇,你可以考慮做你在問什麼,每一個都取決於你的具體情況和你真正想要達到什麼。服務,IntentService(服務子類),AlarmManager或(部分)WakeLock(也許還有一些我缺少的更有創意的解決方案)。

我認爲最簡單的事情就是使用局部WakeLock。它很簡單,如果你想讓一個進程在你的活動中運行,即使在屏幕關閉時也很有用。儘管如此,你必須謹慎使用它,因爲它會咀嚼電池壽命(這就是爲什麼當屏幕關閉時活動會暫停)。

要使用激活鎖定:

添加在您的清單中的權限:

<uses-permission android:name="android.permission.WAKE_LOCK" /> 

在您的活動,啓動激活鎖定,當你需要它

PowerManager mgr = (PowerManager)context.getSystemService(Context.POWER_SERVICE); 
WakeLock wakeLock = mgr.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "WakeLockTag"); 
wakeLock.acquire(); 

時,即可大功告成與wakelock(即不需要再運行該過程),釋放它:

wakeLock.release(); 
+0

謝謝你的建議,我決定接受其他答案,因爲它看起來更像是「正確的事情」。我不想爲此包含其他權限。 – zoltish