应用程序进入后台时发生崩溃

时间:2017-09-21 04:17:10

标签: ios crash crashlytics

我不知道如何重现这次崩溃,但事情正在发生。堆栈显示应用程序将在#16下面显示背景。

我找不到有关此次崩溃的任何帮助。

当应用程序进入后台时,为什么它会尝试处理键盘任务?第1-5行表明它试图做一些键盘任务。

这里可能会发生什么?

Intent intent= new Intent();
intent.putExtra("yourKey",newpassword.getText().toString());
setResult(Activity.RESULT_OK, intent);
finish();

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    String password = data.getStringExtra("yourKey")
}

主题1:

#  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 个答案:

答案 0 :(得分:1)

不了解您的应用程序:如果它使用OpenGL,严格使用UIKit等。如果不知道您正在查看的异常类型或导致该问题的用例,请考虑以下事项

如果某个应用程序崩溃进入后台,尤其是当您在Xcode中调试时没有看到这些崩溃(这些是用户崩溃?)时,需要注意的是应用程序正在发生的事情进入后台,意思是applicationWillResignActive和applicationDidEnterBackground,还有任何计划任务(计时器,可以在飞行中的异步代码,预定更新循环等。确保你关闭任何不允许的事情在后台(例如OpenGL绘图),并停止/暂停任何长时间运行的任务或使用beginBackgroundTaskWithName / endBackgroundTask在后台任务中执行它们。最后,确保您的代码不需要花费很长时间从applicationDidEnterBackground返回或者系统会杀死你的应用。

要实现的其他一些事情是,通过按主页按钮不会发生背景/辞职。下拉通知中心,进入Touch ID警报验证对话框,接听电话等,您的应用程序将被暂停。也许这可以帮助您确定造成它的情景。

键盘删除很有趣,我认为它表示视图在视图变为非活动状态时会收到endEditing消息或类似内容。你有键盘解散时执行的代码吗?如果是这样的话,请再次确保没有做任何在后台工作时不应该做的事情。

它的UI崩溃这一事实让我想到了与后台没有直接关系的东西,以及在主线程之外的线程上进行UI调用,这不是&# 39;安全。 Xcode 9有一个检查器,所以你可以启用它,看看它是否找到任何东西。这些往往是棘手的事情要追查,而Xc9对此有很大的帮助。

你应该在Xcode(来自Apple)看到的崩溃日志,如果这是一个已发布的应用程序,或者在崩溃的人的设备上,将比上面的两个线程有​​更多的信息。只有这两个线程对于跟踪这个问题并不是非常有用。如果你能掌握一个完整的符号化iOS崩溃日志,这可能会更容易理解。

如果您可以发生崩溃,但不能在Xcode中进行调试,您也可以在Xcode之外运行应用程序,但是拉出Window>设备和模拟器窗口并观看设备的系统控制台。崩溃发生。也许会有一个暗示,比如Springboard杀死你的应用程序。您也可以在事后(不是实时)以相同的方式查看日志。您需要隔离崩溃的时间以了解系统日志中的位置,但手机上的应用程序崩溃日志应该会有所帮助。