簡體   English   中英

當應用程序進入后台時發生崩潰

[英]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.

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