簡體   English   中英

什么時候在iOS applicationDidBecomeActive之后立即調用applicationDidEnterBackground?

[英]When in iOS applicationDidEnterBackground called immediately after applicationDidBecomeActive?

在我們的應用程序中,每次用戶打開我們的應用程序時,我們都會記錄(使用外部分析服務)。 但是,我們注意到有許多奇怪的應用會話(幾乎占總會話的 15%)。

在事件的設備時間戳之后,將調用以下方法:

application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?)

applicationDidBecomeActive(_ application: UIApplication)

viewDidAppear(_ animated: Bool) // App Splash Screen

applicationDidEnterBackground(_ application: UIApplication)

查看時間戳,從didFinishLaunchingWithOptionsapplicationDidEnterBackground的延遲非常短(<1 秒)。

我們的假設是,系統有時會在應用程序未被用戶實際打開和“看到”的情況下喚醒應用程序。 但是我們找不到任何關於這種用例的文檔,我們也無法自己重現這個問題。 有人經歷過類似的事情嗎?

編輯:我想補充一點,這些可疑會話通常(但不總是)鏈接到應用程序更新。

我不確定...

我想如果應用程序沒有被用戶終止或暫停,而是因為其他應用程序需要 memory 而被從 memory 中刪除,那么幾乎一個啟動選項可以在需要時喚醒應用程序。 一些例子:

看看這里,看看您的應用程序可以使用哪些啟動選項。 我不確定他們是否真的可以啟動應用程序或者什么......

如果您想對此有更多了解,請確保將來記錄導致應用程序啟動的 launchoptionskey ...

您需要更多信息-我會擴展您的日志記錄以將launchOptions字典轉儲到

application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?)

查看UIApplication.LaunchOptionsKey ,可能涉及很多選項。 注意,如幫助所說:在用戶直接啟動應用程序的情況下,該詞典的內容可能為空

 if let lop = launchOptions { 
   let toLog = lop.map{"\($0.0.rawValue) \($0.1)"}.joined(separator:"\n")
   // log the options
...}

我確實知道這可能與在 AppSwitcher 中進行預覽有關,但這似乎不會觸發didFinishLaunchingWithOptions ,除非您實際上將應用程序置於最前面。 也許 iPad 上有一些分屏的東西? 感覺就像是在無法通過啟動屏幕的上下文中調用應用程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM