我有一個應用程序,其中一個activity
和一個service
。如果我在service
運行時殺死activity
,它也會被殺死。服務不會被殺死對我來說非常重要。如何使當系統殺死(或者我通過清除「最近的應用程序」列表殺吧)activity
的service
仍然有效,直到它完成它的工作?提前致謝!如何避免應用程序/活動中斷時系統查殺服務
回答
這對我來說是非常重要的是,服務不被殺
你的方法可以在被殺死基於任何原因,基於用戶活動(最近的任務列表,第三方任務管理器,設置中的「強制停止」等)或基於操作系統需求(系統RAM越來越低)的任何時間。你無法防止這一點。
您可以採取一些措施來儘量減少操作系統自行決定終止您的過程的機率,例如在服務上使用startForeground()
,但這會阻止用戶執行用戶想要的應用程序過程。
因此,如果該服務停止,則窗口消失,我顯示來自該服務的窗口。
據推測,用戶希望你的窗口消失,如果用戶明確地得到通過最近的任務列表,任務管理器等,您肯定歡迎您的文檔中告知用戶擺脫你的應用程序這會產生任何負面影響。
也歡迎您與具有服務是在一個單獨的進程進行實驗。我的理解是,這不會對最新的Android 4.4任務列表有所幫助,儘管它可能會在早期版本的Android上。這對第三方任務管理器是否有所幫助可能取決於經理,這不應該有助於設置中的「強制停止」。這也意味着你將不得不處理IPC,增加系統RAM消耗,同時你的主要和服務進程都在運行,等等。
好的,我可以在另一個流程中啓動服務嗎?當用戶殺死我的申請流程時,我的服務流程仍然保持原樣? – Salivan
@Salivan:哈,我剛剛添加了一個更新 - 請參閱編輯答案。 – CommonsWare
窗口有一個關閉按鈕,用戶可以通過按下它來擺脫該窗口。這也會停止服務。但是有什麼方法可以在用戶終止活動之後讓服務保持活躍狀態? – Salivan
你可以嘗試從onStartCommand
在您的服務返回START_STICKY
:
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
handleCommand(intent);
// We want this service to continue running until it is explicitly
// stopped, so return sticky.
return START_STICKY;
}
你正在運行綁定服務嗎?如果是這樣,那麼當最後一個客戶端活動斷開(終止)時,系統將終止它。下面是來自reference page導語:
當最後一個客戶從服務解除綁定,系統破壞 服務(除非該服務也被startService()啓動)。
不限制服務而不是系統。我希望服務在用戶清除「最近的應用」列表並終止活動後保持活動狀態。 – Salivan
- 1. 當android系統殺死我的應用程序時,如何保持我的後臺服務活動?
- 2. 如何阻止任何活動被操作系統殺死的應用程序
- 3. 如何殺死系統卸載活動
- 4. 如何防止系統查殺您的應用程序
- 5. 殺應用程序vs殺服務
- 6. 如何殺死服務中的活動
- 7. 如何在Windows服務應用程序中啓動系統時運行代碼?
- 8. 當查殺活動進程時服務重新啓動
- 9. Mac系統服務 - 應用程序「(null)」
- 10. 如何避免斷開JDBC驅動程序時的異常?
- 11. Android:我怎樣才能避免Android操作系統殺死我的服務
- 12. 扭矩服務器:如何避免內存超過時的作業查殺?
- 13. 如何避免性能瓶頸使用JNI時Java Web應用程序/服務
- 14. Android應用程序阻止自動任務殺手的應用程序查殺
- 15. 如何避免果凍豆在後臺時殺死我的應用程序?
- 16. 如果操作系統殺死了應用程序,處理應用程序活動
- 17. 如何檢查相機應用程序是否是服務的活動活動?
- 18. 查找系統應用程序的包和活動名稱?
- 19. 如何避免Spotify應用程序中的同步Web服務調用延遲?
- 20. 如何殺死android應用程序中的所有活動?
- 21. 如何避免從服務開始的多個活動實例
- 22. Android服務,活動和應用程序
- 23. 問題有關係統殺死活動
- 24. 如何避免Web服務超時
- 25. Android:操作系統殺死它時的Autorestart應用程序
- 26. 應用程序被殺後保持活着意向服務
- 27. 啓動應用程序從系統服務
- 28. 避免重新啓動應用程序
- 29. 避免再次啓動應用程序
- 30. 如何避免IIS重置服務器中的應用程序池
您確定不會在onDestroy或您的活動代碼中的某處銷燬該服務嗎? –
是的,我敢肯定,因爲我的'service'運行日誌中看到,當我清除「最近的應用程序」列表中的'service'馬上就會被殺死,然後重新啓動,因爲我設置了'START_STICKY'標籤。 – Salivan
哦,我得到了你,你在問一個不同的事情。但是,是的,我也很確定。我不會在'activity'的代碼中手動銷燬它。但是,另一方面,我的'activity'甚至沒有一個被覆蓋的'onDestroy()'方法,所以也許它被設置爲在該方法中默認關閉所有相關的服務? – Salivan