当应用程序进入后台/活动状态时,安全地暂停/恢复远程UIWebView WebSockets

时间:2014-01-04 02:04:30

标签: ios iphone objective-c uiwebview websocket

我的应用主要是全屏UIWebView。它目前没有实现任何方法来处理暂停/恢复UIWebView内的WebSockets活动。

理论上我的应用程序可以阻止WebView执行所有操作,只需刷新页面即可?我不知道这是不是最好的方法,这就是为什么我在这里。

每当我按下物理主页按钮时,应用程序崩溃,等待一段时间,然后按下应用程序图标并进入应用程序尝试恢复应用程序。该应用程序通常会崩溃并再次恢复到主屏幕。当我再次点击应用程序图标时,应用程序会重新启动,就像设备启动后第一次刚打开一样。

在崩溃期间,我看到调试信息中的内容,如...

  

线程7 WebThread:EXC_BAD_ACCESS(代码= 1,地址= 0x5)

     

void std :: _ 1 :: _push_heap_front(WebCore :: TimerHeapIterator,   WebCore :: TimerHeapIterator,WebCore :: TimerHeapLessThanFunction&amp ;,   的std :: __ 1个:: iterator_traits :: difference_type)   + 194

我不知道该怎么办,我的app app delegate中显然没有设置“applicationDidEnterBackground”或“applicationDidBecomeActive”或任何其他状态,因为我不知道什么是最好的方法以某种方式“暂停“内容”并“恢复”它,甚至如何做到这一点。

1 个答案:

答案 0 :(得分:1)

你可以在JS中停止它。

从ObjC,收听应用状态更改事件( UIApplicationWillResignActiveNotification UIApplicationDidEnterBackgroundNotification )。

在回调中,您将调用 stringByEvaluatingJavaScriptFromString 来停止您的websockets。

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(willResignActive) name:UIApplicationWillResignActiveNotification object:nil];

-(void)willResignActive
{
    [m_webView stringByEvaluatingJavaScriptFromString:@"stopWS();"];    // stopWS is implemented in JS
}