將服務放入單獨的流程或將其保留在應用程序的主流程中的實際區別是什麼?每個場景將用於什麼?Android服務:流程與非服務
回答
當一個服務在主進程中運行時,它會停止,以防你的應用程序因爲任何原因崩潰。將服務放入其自己的過程對於某些服務來說是合理的,這些服務可以從不同的應用程序或服務中使用,這些服務應該獨立於主應用程序運行。
以下爲Android Developer's web site的報價。
請注意,與其他應用程序對象一樣,服務在其宿主進程的主線程中運行。這意味着,如果你的服務要做任何CPU密集型(如MP3播放)或阻塞(如網絡)操作,它應該產生自己的線程來完成這項工作。
傑克指出,你可以直通清單,控制名稱正在運行的進程。但是從Documentatioin以下結果:
有關服務類最混亂實際上都是圍繞着它不是什麼:
- 服務沒有單獨的進程。服務對象本身並不意味着它在自己的進程中運行;除非另有說明,否則它與其所屬應用程序的運行過程相同。
這很有趣,說什麼Here是:
的過程,其中服務是運行的名稱。通常,應用程序的所有組件都在爲應用程序創建的默認進程中運行。它與應用程序包具有相同的名稱。元素的流程屬性可以爲所有組件設置不同的默認值。但是組件可以用自己的進程屬性覆蓋缺省值,從而允許將應用程序分佈在多個進程中。
但無論如何,如果您需要將服務暴露給其他應用程序,例如,您需要向其他應用程序提供內容(如電話簿),將服務設置爲在不同進程中運行是原因。
使用服務的進程屬性被清單解析器拒絕,所以它相當具有誤導性!
Eureka ...此鏈接http://www.androidsoftwaredeveloper.com/2009/03/20/how-to-start-on-boot/顯示進程名稱必須以android.process開頭,例如android:process =「android.process.myservice」 – warrell 2010-12-02 10:26:37
任何與它通信的廣播接收器都必須在該過程中,所以它應該具有相同的名稱,例如android:process =「android.process.myservice」 – warrell 2010-12-02 10:28:00
這大大加快了我的應用程序! – warrell 2010-12-02 10:28:47
我看到把一個服務在另一個進程的唯一原因是
- 該應用程序是資源重,有可能會被操作系統迅速殺死。把服務放在一個單獨的過程中將分配資源,如果你的應用程序死了你的服務不會。
- 只是爲了防止您的應用程序出現錯誤並死亡,您的服務將繼續進行。
但是,如果您創建一個良好的應用程序並使用良好的編程,則不應該遇到這些問題之一。通過讓你的服務在一個單獨的進程中引起麻煩,像SharedPreferences和併發數據庫訪問......我建議不要這樣做。
更不用說......另一個過程意味着另一個DVM。這需要比在一臺DVM上運行更多的資源,並且會減慢速度。
同時將服務放在另一個進程中會使您對主進程隱藏靜態變量的更改。你可以得到的情況,當你分配一個變量有一些價值,並沒有改變!我花了一整天的時間來解決這個問題
true ..你可以解釋爲什麼這種行爲 – 2015-05-18 06:03:18
**不**使用靜態變量的一個很好的理由:-) – William 2016-05-02 04:55:15
@William你建議使用什麼?把我的變量放在APPLICATION類中? – mhdjazmati 2017-03-08 13:11:42
- 1. 與前臺服務交流android
- 2. Android服務與番石榴服務
- 3. Android ContentProvider與服務
- 4. Android BroadcastReceiver與服務
- 5. android與web服務
- 6. 非java服務與jHipster
- 7. Android遠程服務
- 8. 遠程服務 - Android
- 9. Android服務教程?
- 10. Android遠程服務
- 11. 非小服務程序JSP
- 12. Android的入門服務,處理線程與位置服務API
- 13. 春季Web服務流程
- 14. WCF服務與Windows服務
- 15. Windows服務與服務層
- 16. Symfony2從非服務類訪問服務
- 17. 流式數據服務(網絡服務)
- 18. 工作流服務作爲WCF服務的服務參考
- 19. 主機與客戶之間的流浪服務運行服務
- 20. Android中的OpenCV服務與線程
- 21. Android服務與套接字編程
- 22. Android應用程序與XAMPP服務器
- 23. 服務與Android中的線程
- 24. Android客戶端與遠程服務器
- 25. 服務與android:進程不啓動
- 26. Android的Web服務與PHP
- 27. Android綁定服務與AsyncTask
- 28. 與Android服務通信
- 29. Android與WSDL網絡服務
- 30. Mvvmcross:與Android服務互動
類似於[Android - 如何決定是否在單獨的進程中運行服務?](http://stackoverflow.com/questions/4658511/android-how-to-decide-whether-to-run-a -service-in-a-separate-process) – 2012-08-14 05:49:05