【问题标题】:Safely Pause/Resume Remote UIWebView WebSockets when the app enters Background/Active states当应用程序进入背景/活动状态时,安全地暂停/恢复远程 UIWebView WebSockets
【发布时间】:2014-01-21 20:20:51
【问题描述】:

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

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

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

在崩溃期间,我在调试信息中看到了一些东西,例如...

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

void std::_1::_push_heap_front(WebCore::TimerHeapIterator, WebCore::TimerHeapIterator, WebCore::TimerHeapLessThanFunction&, std::__1::iterator_traits::difference_type) + 194

我不确定该怎么做,我的应用程序委托中显然没有为“applicationDidEnterBackground”或“applicationDidBecomeActive”或任何其他状态设置任何内容,因为我不确定以某种方式实现的最佳方法是什么”暂停”内容并“恢复”它,甚至是如何做到这一点。

【问题讨论】:

    标签: ios iphone objective-c uiwebview websocket


    【解决方案1】:

    你可以在 JS 中停止它。

    从 ObjC 监听应用状态更改事件(UIApplicationWillResignActiveNotificationUIApplicationDidEnterBackgroundNotification)。

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

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(willResignActive) name:UIApplicationWillResignActiveNotification object:nil];
    
    -(void)willResignActive
    {
        [m_webView stringByEvaluatingJavaScriptFromString:@"stopWS();"];    // stopWS is implemented in JS
    }
    

    【讨论】:

      猜你喜欢
      • 2014-12-07
      • 2015-08-16
      • 1970-01-01
      • 2017-11-17
      • 2013-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多