Android 是否可以将WebView和#x27;用户界面和HTTP线程?

Android 是否可以将WebView和#x27;用户界面和HTTP线程?,android,android-asynctask,android-webview,httpconnection,android-networking,Android,Android Asynctask,Android Webview,Httpconnection,Android Networking,由于各种原因,我需要了解的实际实例化和初始化 这意味着它的底层HTTP连接也在UI线程上进行 如果这是真的,是否可以将WebView的UI thead与HTTP连接线程分离 如果可能,实现这一点的正确方法是什么?我发现很难相信Android会在UI线程上运行远程HTTP请求,假设您通过WebView.loadUrl()启动请求。这将导致糟糕的用户体验 很快,我在调试器中运行了一个Android应用程序,带有一个基本的WebView,然后在调试器中停止。我看到的是: 如果WebViewCoreT

由于各种原因,我需要了解的实际实例化和初始化

这意味着它的底层HTTP连接也在UI线程上进行

如果这是真的,是否可以将WebView的UI thead与HTTP连接线程分离


如果可能,实现这一点的正确方法是什么?

我发现很难相信Android会在UI线程上运行远程HTTP请求,假设您通过
WebView.loadUrl()启动请求。这将导致糟糕的用户体验

很快,我在调试器中运行了一个Android应用程序,带有一个基本的
WebView
,然后在调试器中停止。我看到的是:

如果
WebViewCoreThread
WebViewWorkerThread
http0
-
http3
未处理
WebView
对象的网络连接,则

  • 他们的名声很坏
  • 安卓系统的构建非常糟糕
  • 另外,如果您看到stack overflow声誉最高的用户之一给出的答案。调试器中的一个快速步骤告诉我,在UI线程(也称为
    main
    )上调用的
    loadUrl()
    ,完成速度太快,无法在UI线程上同步处理连接。(我在调用
    loadUrl()
    之前和之后放置了一个断点,我知道该URL不会很快提供)


    所以,我的答案是,你完了。。。他们已经分开了(是的!)

    你说的有道理,但在我重写的loadUrl()中,我实际上记录了线程id(使用
    android.os.Process.myTid()
    ),它与UI的线程id完全相同。我错过什么了吗?您是说实际的HTTP请求是在名为
    http0
    -
    http3
    的线程上进行的吗?有没有办法在应用程序中记录这些HTTP线程的实际线程ID?谢谢。@BillTheApe,你说得对<在UI线程上调用代码>加载URL()
    。这是意料之中的。但是,(很可能)在Android的
    loadUrl()
    实现中,它获取URL(字符串
    URL
    对象)并将其放入线程安全队列。完成后,
    loadUrl()
    完成,并将控制权返回给调用线程(例如UI线程)。然后,另一个线程(不是UI线程)从线程安全队列中检索URL,并使用它打开到Web服务器的连接。然后它检索数据,最后。。。。。。通知UI线程在
    WebView
    中呈现检索到的内容。我不知道它到底是如何工作的,但这是一个在非UI线程上处理网络活动的示例,但您的实验仍然显示在UI线程上调用
    loadUrl()。关键是当
    loadUrl()
    完成时,
    WebView
    可能没有实际呈现到屏幕上的所有内容(甚至没有从网络检索到)。这有意义吗?因此,总结一下,将
    loadUrl()
    概念上看作是启动网络操作的请求。并非完全包含在数据完成时检索和显示数据所需的所有工作的内容。@BillTheApe,对于相关问题。它应该澄清安卓工程师在实现时到底想要实现什么。