Android 是否可以将WebView和#x27;用户界面和HTTP线程?
由于各种原因,我需要了解的实际实例化和初始化 这意味着它的底层HTTP连接也在UI线程上进行 如果这是真的,是否可以将WebView的UI thead与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
如果可能,实现这一点的正确方法是什么?我发现很难相信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,对于相关问题。它应该澄清安卓工程师在实现时到底想要实现什么。