Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android widget post()和handler post()之间有什么区别?_Android - Fatal编程技术网

Android widget post()和handler post()之间有什么区别?

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()中的最后一个执行,问题是大

我在AsyncTask.doInBackground中使用loadUrl初始化了一个WebView。我将其初始化如下:

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()
调用此函数,在该函数中,视图创建保证已完成。