2014-11-24 52 views
1

我正在研究一個應用程序,在該應用程序中,我需要檢查用戶何時從一個應用程序(例如Facebook)切換到另一個應用程序(例如,Gmail)。優化服務

爲此,我正在運行後臺服務並檢查循環中的頂級活動。正如預期的那樣,這會導致性能下降,這當然是一個糟糕的做法。我已經考慮過這個計時器任務,但是每隔1秒就會運行一次,所以保持更高的精度,我採取循環的方式。

由於在切換髮生時沒有意圖廣播,所以我不得不採取上述兩種方法之一。任何解決這個問題的解決方法將不勝感激。

回答

0

1.您使用的是後臺服務,並不保證您的服務將始終運行。所以,它不合適。

2.週期性服務也是一種浪費,因爲應用程序切換可能發生在不到一秒的時間內,並且在每秒之後喚醒服務的成本不會更低。

剩下的選項是你可以使用Foreground Service.Foreground Service不具有成本效益,但似乎解決了你的問題。用戶將始終知道服務正在運行,並且始終可以決定是否啓用/禁用該服務。

UPDATE: 如果你是真正的成本,精明的,你可以去後臺服務與START_REDELIVER_INTENT。它會告訴系統重新啓動並在事故發生後重新獲得服務,並重新發送發生事故時出現的意圖。

+0

正如我所指出的,我在線程中使用了一個循環(我從服務開始),並且我已經給用戶提供了停止服務的選項,從應用程序的主要活動服務已啓動)。正如你剛剛回答的那樣,切換可以在不到一秒鐘的時間內完成,所以我不能真正依靠一些定期的服務或定時器任務。使用前臺服務可能會解決這個問題,但問題是性能問題和後臺服務中CPU使用率相同。所以,我的問題仍然存在,是否有任何方法可以使其具有成本效益並且仍然能夠產生結果。 – 2014-11-24 14:51:30

+0

檢查更新的答案。 – vkm 2014-11-25 06:26:04

+0

我的問題與服務崩潰無關,它與我使用的循環有關,這對CPU來說太多了(因爲它是無限的,除非用戶停止服務或其他事情發生)。關於START_REDELIVER_INTENT,我猜這會在Android殺死服務或由於某種原因崩潰時使用。但這不是問題,我只想減少CPU負載,同時獲得所需的結果。 – 2014-11-25 07:07:23