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_COMPLETED和onReceive
手動啓動該服務。
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。來自博客:
有時候人們想知道爲什麼他們的多線程應用程序不會使用 似乎在使用所有可用的內核。這通常發生在兩個原因:
- 核心之間遷移線程昂貴,性能明智;
- 激活一個CPU內核是昂貴的,電池方面。
P.S. :持續運行的服務總是被視爲android中的反模式,因爲它們不斷地使用系統資源,從而間接地影響其他應用程序。因此,如果有必要使用它們,請仔細設計它們。
檢查這..這可能會給你更多的信息。 http://commonsware.com/blog/2013/07/30/notifications-foreground-services-android-4p3.html – User12111111 2014-09-02 11:38:13