Android widget post()和handler post()之间有什么区别?
我在AsyncTask.doInBackground中使用loadUrl初始化了一个WebView。我将其初始化如下:Android widget post()和handler post()之间有什么区别?,android,Android,我在AsyncTask.doInBackground中使用loadUrl初始化了一个WebView。我将其初始化如下: webView.post(new Runnable() { @Override public void run() { webView.loadUrl(authURL); } }); AsyncTask作为Activity.onCreate()中的最后一个执行,问题是大
webView.post(new Runnable() {
@Override
public void run() {
webView.loadUrl(authURL);
}
});
AsyncTask作为Activity.onCreate()中的最后一个执行,问题是大部分时间网页都没有加载,我看到了白色屏幕。如果我用handler替换webView,那么一切都没问题。我在这里遗漏了什么?如果需要在UI线程上运行,为什么要在
doInBackground()
中执行此操作
Hander.post()
和View.post()
之间的区别在于Handler
将运行您的代码
在线程上创建了
处理程序
实例(不一定是UI线程),而视图
将始终在UI线程上运行它(因为视图绑定到它) 在调用loadUrl之前,我需要从服务器检索此url。我知道,通过引入更多的代码复杂性,我可以在onPostExecute中实现这一点。我开始认为整个问题都与docs对View.post()的说法有关:“只有在将此视图附加到窗口时,才能从UI线程外部调用此方法。”,但我不知道在我的情况下会发生什么。不确定视图是如何附加的,但是您肯定应该从onPostExecute()
调用它。增加的复杂性将是返回URL列表或将其保存到字段中。此外,您可能希望从onStart()
调用此函数,在该函数中,视图创建保证已完成。