iOS App崩溃 – 我怀疑它与使用WebSockets的UIWebView有关

iOS App崩溃 – 我怀疑它与使用WebSockets的UIWebView有关,第1张

概述我目前没有使用applicationWillResignActive / applicationWillEnterForeground或类似的东西,因为我不确定如何处理我遇到的这个问题. 如果我打开它,我的应用程序不断崩溃,按主屏幕,等待大约5分钟,并尝试再次返回应用程序. 该应用程序主要是一个UIWebView加载node.js驱动的websocket,所以我认为这是罪魁祸首. 当用户离开应用程 我目前没有使用applicationWillResignActive / applicationWillEnterForeground或类似的东西,因为我不确定如何处理我遇到的这个问题.

如果我打开它,我的应用程序不断崩溃,按主屏幕,等待大约5分钟,并尝试再次返回应用程序.

该应用程序主要是一个UIWebVIEw加载node.Js驱动的websocket,所以我认为这是罪魁祸首.

当用户离开应用程序时,如何阻止UIWebVIEw执行任何 *** 作(applicationWillResignActive是我猜测需要使用的).我已经玩了六个想法,我不能为我的生活让应用程序停止崩溃.

我目前的想法:

- (voID)applicationWillResignActive:(UIApplication *)application{[[NSNotificationCenter defaulCenter] postNotificationname:@"EnterBackground" object:Nil userInfo: Nil];}

…然后从那里编辑我的VIEwController.m文件,对该页面上的UIWebVIEw做一些事情.问题是,什么会阻止UIWebVIEw在后台执行任何 *** 作?我试过停止加载,由于某种原因没有成功,或者它仍会崩溃.

解决方法 我无法重现确切的问题(WebThread:EXC_BAD_ACCESS(代码= 1,地址= 0x5)-taken从您的 other question),但我确实注意到WebSocket消息正在被缓冲,所以它可能是你离开应用程序在背景足够长的时候,你会遇到可能导致这次崩溃的内存压力问题.

但是,在研究这个问题的过程中,我确实设法通过源自WebThread的EXC_BAD_ACCESS使应用程序可靠崩溃,因此我将在此处发布详细信息,希望它可能对您或其他人有用.

For the purposes of this question,my WebSocket server simply broadcast the time every second to any connected clIEnts.

正如我所提到的,我注意到UIWebVIEw在应用程序背景时缓冲了WebSocket消息.为了防止这种情况,我想在应用程序移动到后台时关闭WebSocket连接.

在托管UIWebVIEw的视图控制器中,我为UIApplicationWillResignActiveNotification注册了一个选择器,在那个选择器中,我在我的网页中调用了一个在WebSocket对象上调用close的JavaScript函数.

VIEwController.m:

- (voID)vIEwDIDLoad{    [super vIEwDIDLoad];    [[NSNotificationCenter defaultCenter] addobserver:self                                             selector:@selector(appWillResignActive:)                                                 name:UIApplicationWillResignActiveNotification                                               object:nil];}- (voID)appWillResignActive:(NSNotification *)notification{    [self.webVIEw stringByEvaluatingJavaScriptFromString:@"closeWebSocket();"];}

网页:

function closeWebSocket() {    socket.close(); // socket is an instance of WebSocket    socket = undefined;}

我希望WebSocket在应用程序移回前台时重新连接,所以我注册了另一个选择器,这次是UIApplicationDIDBecomeActiveNotification,在那个选择器中调用另一个初始化WebSocket连接的函数.

VIEwController.m:

- (voID)vIEwDIDLoad{    [super vIEwDIDLoad];    [[NSNotificationCenter defaultCenter] addobserver:self                                             selector:@selector(appWillResignActive:)                                                 name:UIApplicationWillResignActiveNotification                                               object:nil];    [[NSNotificationCenter defaultCenter] addobserver:self                                             selector:@selector(appDIDBecomeActive:)                                                 name:UIApplicationDIDBecomeActiveNotification                                               object:nil];}- (voID)appWillResignActive:(NSNotification *)notification{    [self.webVIEw stringByEvaluatingJavaScriptFromString:@"closeWebSocket();"];}- (voID)appDIDBecomeActive:(NSNotification *)notification{    [self.webVIEw stringByEvaluatingJavaScriptFromString:@"openWebSocket();"];}

网页:

function openWebSocket() {      socket = new WebSocket("ws://" + document.location.host + "/Ping");      socket.onopen = function () { console.log("Opened"); };    socket.onmessage = function (message) {       var log = $('#log');      log.HTML(message.data + '<br>' + log.HTML());       console.log(message.data);    };    socket.onclose = function () { console.log("Closed"); };}

运行应用程序,建立WebSocket连接,收到消息,并将应用程序移至后台.几秒钟之后,我将应用程序带回前台(通过点击应用程序图标),应用程序崩溃,出现类似于WebThread的异常:EXC_BAD_ACCESS(代码= 1,地址= 0x5.原因是评估当应用程序返回到前台时,对openWebSocket()的JavaScript调用.将openWebSocket()的执行延迟几毫秒就解决了问题.通过appDIDBecomeActive方法看起来像这样:

- (voID)appDIDBecomeActive:(NSNotification *)notification{    [self.webVIEw stringByEvaluatingJavaScriptFromString:@"setTimeout(openWebSocket,5);"];}

再次运行应用程序,WebSocket连接已建立,消息已收到,应用程序已落后.几秒钟后,当我将应用程序带回到前台时,应用程序没有崩溃,并且消息开始再次通过WebSocket连接.

总结

以上是内存溢出为你收集整理的iOS App崩溃 – 我怀疑它与使用WebSockets的UIWebView有关全部内容,希望文章能够帮你解决iOS App崩溃 – 我怀疑它与使用WebSockets的UIWebView有关所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1071876.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存