2014-09-02 85 views
1

我在android中創建了一個持續運行的服務,所以我想前臺服務是最好的選擇。我有一些關於android的前臺服務的一般問題,因爲我即將實現它。谷歌文檔沒有幫助我。前臺服務相關的問題android

  1. 當前臺服務可以被殺死?
  2. 我們是否需要將前臺服務定義爲START_STICKY?
  3. 我們是否需要重新啓動android BOOt上的前臺服務,否則它們會自動啓動。
  4. 我們可以一次從同一個應用程序啓動多少個前臺服務。我在google文檔中以非常拙劣的方式閱讀過某個地方,我們可以一次提名3個前臺服務,這是什麼意思?
  5. 顧名思義,前臺服務會中斷主線程還是UI線程?

關注 Utsav。

+0

檢查這..這可能會給你更多的信息。 http://commonsware.com/blog/2013/07/30/notifications-foreground-services-android-4p3.html – User12111111 2014-09-02 11:38:13

回答

2
1. When a foreground service can be killed? 

託管前臺服務的過程看作是一個前臺進程。這樣的過程被認爲是最重要的,最後被殺死。從docs

通常,在任何給定時間只有少數前臺進程存在。 他們只是作爲最後的手段被殺 - 如果內存太低,他們不能全部繼續運行。通常,此時,設備已達到內存分頁狀態,因此需要保留一些前臺進程以保持用戶界面的響應。

2. Do we need to define foreground service as START_STICKY? 

取決於您正在執行的任務。既然你剛纔說的是不斷運行的服務,我相信你可能需要它。該標誌對於正常和前臺服務具有相同的含義。 START_STICKY標誌表示,如果服務在主機進程被終止後重新啓動,服務的onStartCommand將以空目的被調用。這是使服務知道重新啓動的一種方式。

3. Do we need to restart foreground services on android BOOt or they automatically start. 

號您需要註冊一個廣播接收器爲Intent.ACTION_BOOT_COMPLETEDonReceive手動啓動該服務。

4. How many foreground services can we start from the same application at a time. 
I have read somewhere in very obsequious manner in google docs that we can nominate 3 foreground service at a time, what does that mean? 

不確定,如果您可以共享源代碼,那將是非常好的。無論您有1或3個前臺服務,託管它的進程都被視爲前臺進程。託管多個前臺服務會導致狀態欄中出現多個通知,這會讓用戶意識到正在運行的服務並知道如何停止它們。您還可以擁有一個運行不同操作的多個線程的前臺服務。

5. As the name suggests does the foreground service interrupts the main or UI thread? 

如上所述,前臺服務使得進程託管它作爲前臺進程並且用戶知道該服務。除此之外,與正常服務完全沒有區別。服務將默認在UI線程上運行,長時間運行的操作需要在單獨的線程上運行。如果設備具有多個核心處理器,線程可能可能不是並行運行在可用的核心上。你可以閱讀@fadden寫的blog。來自博客:

有時候人們想知道爲什麼他們的多線程應用程序不會使用 似乎在使用所有可用的內核。這通常發生在兩個原因:

  1. 核心之間遷移線程昂貴,性能明智;
  2. 激活一個CPU內核是昂貴的,電池方面。

P.S. :持續運行的服務總是被視爲android中的反模式,因爲它們不斷地使用系統資源,從而間接地影響其他應用程序。因此,如果有必要使用它們,請仔細設計它們。

+0

感謝您保持答案短而脆。祝賀50分:) – 2014-09-06 06:10:42