【问题标题】:Does WebView's loadUrl method run on UI thread?WebView 的 loadUrl 方法是否在 UI 线程上运行?
【发布时间】:2010-08-26 03:14:56
【问题描述】:

我想知道 webview 如何加载特定的 URL。它是创建一个新线程还是在同一个线程(即 UI 线程)中加载 URL?我问这个的原因是当我从当前活动(在当前活动的 onCreate 方法中)启动一个活动时,我遇到了一些奇怪的唤醒锁定问题,它在它的 onCreate 方法中创建一个 WebView 并使用 loadUrl 方法加载一个 URL。因此,当我完成此活动并返回启动的活动时,由于唤醒锁定时间已过期,此活动将重新启动。
我搜索了一下,发现如果活动的 onCreate 方法花费的时间太长,则此类问题可能发生。你们中有人遇到过这种涉及 WebView 的问题吗?任何形式的帮助都将不胜感激。
这是示例代码。

Activity A:
class ActivityA {
  onCreate(){
    initializeSomething();
    registerSomeEvents();
    startSomething();
  }
  onSomeListener(){
    if(someFlag) {
      startActivity(ActivityB);
      //this will pause the current activity i.e. ActivityA
    }
  }
}
Activity B:
class ActivityB(){
  onCreate() {
    if(someFlag){ //someFlag is coming in intent
     helper = createHelperX();
    } else {
     helper = createHelperY();
    }
    helper.pleaseHelp(); //this does the rest of thing using activity instance
}

HelperX:

class HelperX(){ createHelper() { //setup layout views etc, no WebView here //and wait for user interaction //register some events } onSomeEvent(){ if(someOtherFlag) { startActivityForResult(ActivityB); //and pass some flag, now this flag will trigger HelperY } }

HelperY: class HelperY(){ createHelper() { //setup views etc , this contains a WebView and calls loadURL. } }

【问题讨论】:

  • 您好,我在 onCreate 中使用了 WebViews(和 loadUrl)并且从未遇到任何问题(甚至在同一个 onCreate 中进行了 XML 解析)。你在 onCreate 中还做了什么?您是作为对等活动还是作为子活动启动该活动?
  • 所以 startActivityForResult 创建一个子活动?如果确实如此,那么是的,我正在启动一个子活动。
  • 我添加了一些示例代码。
  • 这有点笼统。您能否粘贴更具体的代码。
  • 您好,找到了问题所在。启动新活动时,主要活动代码正在做一些坏事。感谢您的帮助:)

标签: android multithreading webview


【解决方案1】:

WebView 中的 loadUrl 方法使用 Handler 机制,即它将在 UI 线程中运行。您应该在活动暂停/停止时调用 webView.stopLoading() 来停止数据加载。

【讨论】:

  • 这可能是为什么有时 webview 在从另一个类调用 loadUrl 时似乎使我的应用程序崩溃而没有错误消息的原因吗?
  • 你如何让它在不同的线程 10 上运行,因为当你把它放在自己的线程中时,它会失败,说它不能在不同的线程上运行
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-02
  • 1970-01-01
相关资源
最近更新 更多