![](/img/trans.png)
[英]Application going in background — Home button tapped when application is running
[英]Crash happening when the application is going to background
我不知道該如何崩潰,但正在發生很多事情。 堆棧顯示該應用程序將在下面的#16進入后台。
關於此崩潰,我找不到任何幫助。
當應用程序進入后台時,為什么要嘗試處理鍵盤任務呢? 第1-5行顯示其試圖執行一些鍵盤任務。
這里可能會發生什么?
# 1 _dispatch_barrier_sync_f_slow + 518 (libdispatch.dylib + 0x00010c68) 0x0
# 2 __88-[UIKeyboardLayout recognizer:releaseTouchToLayoutWithId:startPoint:endPoint:whenReady:]_block_invoke + 95 (UIKit + 0x004297fd) 0x0
# 3 __88-[UIKeyboardLayout recognizer:releaseTouchToLayoutWithId:startPoint:endPoint:whenReady:]_block_invoke + 93 (UIKit + 0x004297fb) 0x74cd0c8
# 4 -[UIKeyboardTaskQueue continueExecutionOnMainThread] + 393 (UIKit + 0x0003737d) 0x74cd0f8
# 5 __39-[UIKeyboardLayout resetHRRLayoutState]_block_invoke + 625 (UIKit + 0x0042a809) 0x74cd118
# 6 _dispatch_client_callout + 21 (libdispatch.dylib + 0x00001781) 0x74cd2b0
# 7 _dispatch_barrier_sync_f_invoke + 49 (libdispatch.dylib + 0x0000da33) 0x74cd2c0
# 8 -[UIKeyboardLayout resetHRRLayoutState] + 107 (UIKit + 0x0042a56b) 0x74cd2dc
# 9 +[UIKeyboardImpl applicationWillResignActive:] + 223 (UIKit + 0x0012fe35) 0x74cd304
# 10 __CFNOTIFICATIONCENTER_IS_CALLING_OUT_TO_AN_OBSERVER__ + 9 (CoreFoundation + 0x000a6db7) 0x74cd318
# 11 _CFXRegistrationPost + 381 (CoreFoundation + 0x000a66f7) 0x74cd320
# 12 ___CFXNotificationPost_block_invoke + 39 (CoreFoundation + 0x000a64df) 0x74cd35c
# 13 -[_CFXNotificationRegistrar find:object:observer:enumerator:] + 1241 (CoreFoundation + 0x00101307) 0x74cd378
# 14 _CFXNotificationPost + 539 (CoreFoundation + 0x0000a033) 0x74cd6f0
# 15 -[NSNotificationCenter postNotificationName:object:userInfo:] + 65 (Foundation + 0x000060ab) 0x74cd8bc
# 16 -[UIApplication _deactivateForReason:notify:] + 815 (UIKit + 0x00073e0f) 0x74cd8d0
# 17 __61-[UIApplication _sceneSettingsPreLifecycleEventDiffInspector]_block_invoke + 93 (UIKit + 0x00282255) 0x74cd908
# 18 __52-[FBSSettingsDiffInspector inspectDiff:withContext:]_block_invoke.27 + 165 (FrontBoardServices + 0x00020cfd) 0x74cd928
# 19 __NSIndexSetEnumerate + 437 (Foundation + 0x000af3df) 0x74cd9b8
# 20 -[NSIndexSet enumerateIndexesWithOptions:usingBlock:] + 65 (Foundation + 0x00030bcd) 0x74cda48
# 21 -[BSSettingsDiff inspectChangesWithBlock:] + 101 (BaseBoard + 0x00035a57) 0x74cda6c
# 22 -[FBSSettingsDiff inspectOtherChangesWithBlock:] + 89 (FrontBoardServices + 0x0001b025) 0x74cda98
# 23 -[FBSSettingsDiffInspector inspectDiff:withContext:] + 299 (FrontBoardServices + 0x00020b5b) 0x74cdab8
# 24 __70-[UIApplication scene:didUpdateWithDiff:transitionContext:completion:]_block_invoke + 101 (UIKit + 0x00283427) 0x74cdb20
# 25 -[UIApplication scene:didUpdateWithDiff:transitionContext:completion:] + 823 (UIKit + 0x00283131) 0x74cdb50
# 26 -[UIApplicationSceneClientAgent scene:handleEvent:withCompletion:] + 411 (UIKit + 0x00588aa1) 0x74cdc18
# 27 __80-[FBSSceneImpl updater:didUpdateSettings:withDiff:transitionContext:completion:]_block_invoke + 209 (FrontBoardServices + 0x0000af65) 0x74cdc7c
# 28 __FBSSERIALQUEUE_IS_CALLING_OUT_TO_A_BLOCK__ + 17 (FrontBoardServices + 0x00035c11) 0x74cdca8
# 29 -[FBSSerialQueue _performNext] + 219 (FrontBoardServices + 0x00035acb) 0x74cdcb8
# 30 -[FBSSerialQueue _performNextFromRunLoopSource] + 43 (FrontBoardServices + 0x00035db5) 0x74cdd94
# 31 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 11 (CoreFoundation + 0x000b6fdb) 0x74cdda4
# 32 __CFRunLoopDoSources0 + 423 (CoreFoundation + 0x000b6b03) 0x74cddac
# 33 __CFRunLoopRun + 1159 (CoreFoundation + 0x000b4f4f) 0x74cdde8
# 34 CFRunLoopRunSpecific + 469 (CoreFoundation + 0x000080ed) 0x74cea88
# 35 CFRunLoopRunInMode + 103 (CoreFoundation + 0x00007f0f) 0x74ceb70
# 36 GSEventRunModal + 79 (GraphicsServices + 0x00009b3f) 0x74ceb98
# 37 UIApplicationMain + 149 (UIKit + 0x00071e81) 0x74cebb8
# 38 UIApplicationMain (ApplicationHooks.m:50) (MyApp + 0x0002235f) 0x74cebdc
# 39 main (main.mm:18) (MyApp + 0x003a227f) 0x74cebfc
# 40 0x1b33a4e9 in start + 1 (libdyld.dylib + 0x000034e9) 0x74cec18
線程1:
# 1 0x1b40d808 in __psynch_cvwait + 24 (libsystem_kernel.dylib + 0x00015808) 0x0
# 2 0x1b4c3cb3 in _pthread_cond_wait + 561 (libsystem_pthread.dylib + 0x00002cb3) 0x0
# 3 0x1b4c5033 in pthread_cond_wait + 37 (libsystem_pthread.dylib + 0x00004033) 0x190e50a0
# 4 0x1be0ed7 in SyncCondition::Wait() (SyncSynchronization.h:592) (MyApp + 0x01ba9ed7) 0x190e50ac
# 5 0x1be0f0b in SyncCondition::WaitForDuration(unsigned long) (MyAppSync.cpp:469) (MyApp + 0x01ba9f0b) 0x190e50b4
# 6 0x446ebef in invocation function for block in wlm_dispatch_create_block_wrapper(void () block_pointer) (MyAppThread_objc.mm:203) (MyApp + 0x04437bef) 0x190e5e78
# 7 0x1b30d795 in _dispatch_call_block_and_release + 9 (libdispatch.dylib + 0x00001795) 0x190e5f24
# 8 0x1b31ab1b in _dispatch_queue_override_invoke + 535 (libdispatch.dylib + 0x0000eb1b) 0x190e5f30
# 9 0x1b31c1b3 in _dispatch_root_queue_drain + 325 (libdispatch.dylib + 0x000101b3) 0x190e5f58
# 10 0x1b31c00d in _dispatch_worker_thread3 + 105 (libdispatch.dylib + 0x0001000d) 0x190e5f90
# 11 0x1b4c28eb in _pthread_wqthread + 1039 (libsystem_pthread.dylib + 0x000018eb) 0x190e5fa0
# 12 0x1b4c24ca in start_wqthread + 6 (libsystem_pthread.dylib + 0x000014ca) 0x190e5fe0
在不了解您的應用程序的任何情況下:如果它使用的是OpenGL,嚴格使用UIKit等。並且在不知道您所看到的異常類型或導致該異常的用例的情況下,需要考慮以下事項。
如果某個應用程序在后台崩潰,特別是當您在Xcode中調試時看不到這些崩潰(這些是用戶崩潰?)時,要查看的是應用程序進入后台時發生的情況,這意味着applicationWillResignActive和applicationDidEnterBackground,還有任何計划的任務(計時器,可能正在運行的異步代碼,計划的更新循環等)。請確保您關閉了后台不允許執行的任何操作(例如OpenGL繪圖),並停止/暫停任何長時間運行的任務,或使用beginBackgroundTaskWithName / endBackgroundTask在后台任務中執行它們,最后,確保您的代碼不會花很長時間從applicationDidEnterBackground返回,否則系統將殺死您的應用程序。
要實現的其他一些功能是,不僅僅通過按“主頁”按鈕即可進行后台/退出。 當您下拉通知中心,進入“ Touch ID警報身份驗證”對話框,接聽電話等等時,您的應用將被暫停。 也許這將幫助您確定造成這種情況的情況。
鍵盤掉落很有趣,我認為它表示視圖在變為非活動狀態時表示視圖正在收到endEditing消息或類似內容。 鍵盤關閉時,您是否執行任何代碼? 如果是這樣,請再次確保沒有做任何您在后台運行時不應該做的事情。
這是UI崩潰的事實,這使我想到了與后台沒有直接關系的事情,這是在除主線程之外的其他線程上進行UI調用,這並不安全。 Xcode 9有一個檢查器,因此您可以啟用它並查看它是否找到任何東西。 這些往往很難處理,而Xc9對此很有幫助。
如果這是一個已發布的應用程序,或者在發生崩潰的人的設備上,您應該在Xcode(來自Apple)中看到的崩潰日志將比上述兩個線程提供更多的信息。 只是這兩個線程對於跟蹤此消息不是超級有用。 如果您可以獲取完整的帶符號的iOS崩潰日志,則可能更容易找出。
如果可以使崩潰發生,但不能在Xcode中進行調試,則還可以在Xcode外部運行該應用程序,但是在發生崩潰時,請拉開Window> Devices and Simulators窗口並觀察設備的系統控制台。 也許那里會有一個提示,例如Springboard殺死您的應用程序。 您也可以以相同的方式查看事實(不存在)之后的日志。 您需要隔離崩潰的時間,才能知道在系統日志中查找的位置,但是手機上的應用崩潰日志應該會有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.