我正在 Android 11 設備上運行 Slack 應用程式。如果通過點擊設備的主頁按鈕將應用置于后臺并且 Slack 聊天訊息到達,它會在 Android 通知欄上顯示通知。如果您點擊通知圖示打開通知,然后點擊訊息,通知將被洗掉。
令我困惑的是,像 Slack 這樣的應用程式在接收聊天訊息時是否甚至使用了前臺服務。根據我的經驗,要在未顯示 UI 時持續運行后臺服務,您必須在 Android 的通知欄上顯示一個通知圖示,以向用戶表明該應用程式正在運行后臺服務。雖然這被認為是后臺服務,但它實際上被稱為前臺服務。
但是 Slack 不會在通知欄上顯示一個圖示來指示任何前臺服務。因此,如果它不使用前臺服務但可以在 UI 未顯示時接收訊息并發布通知,這是如何完成的?Android 中是否發生了一些變化,您不需要前臺服務即可在后臺運行長時間運行的行程?
我能想到的唯一可能的解釋是,使用繼承自 Application 的類而不是服務,并且接收訊息的程序是在從此類啟動的協程中完成的,并且只要應用程式保持活動狀態就會保持活動狀態. 但如果這是真的,這意味著應用程式可以在沒有任何 UI 顯示的情況下運行無休止的后臺行程,這意味著 Android 運行無休止的后臺服務所需的策略發生了一些變化。
uj5u.com熱心網友回復:
令我困惑的是,像 Slack 這樣的應用程式在接收聊天訊息時是否甚至使用了前臺服務
最有可能的是,他們沒有。
因此,如果它不使用前臺服務但可以在 UI 未顯示時接收訊息并發布通知,這是如何完成的?
最有可能的是,在 Google Play 生態系統設備上,他們使用Firebase Cloud Messaging (FCM) 作為觸發器來查找需要用戶通知的訊息。FCM 及其前身(C2DM和GCM)已經存在十多年,專為此類問題而設計。
uj5u.com熱心網友回復:
如果您查看firebase 訊息傳遞檔案,您將了解到達客戶端的通知不是由應用程式處理的,即使應用程式未運行,Android 傳輸層 (ATL) 也負責獲取訊息!
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/403185.html
標籤:
下一篇:由java.lang.IndexOutOfBoundsException引起:Index:2,Size:2bySoftKeyboard
