Android AsyncTask仍悬挂UI

时间:2014-04-06 13:33:28

标签: android asynchronous jsoup

我使用AsyncTask从网上获取一些数据,但在获取数据时似乎仍然悬挂了UI。

我的代码:https://gist.github.com/MasterEjay/10005933

ThreadParse类在我的主类中,initWebView方法也在主类内,而不是ThreadParse。

1 个答案:

答案 0 :(得分:3)

您应该使用execute方法启动ASynctask。

使用您的代码,您只需在主线程中调用该方法即可。 execute将为Asynctask创建一个新线程。

public void initWebView(String link) {
    ThreadParse parse = new ThreadParse();
    parse.execute(link);
}

如果您真的需要在doInBackground中对用户界面执行某些操作,则应使用runOnUIThread

我将此代码块作为示例

catch (IndexOutOfBoundsException ex){
    currentPage = 1;
    totalPages = 1;
    Toast.makeText(Thread.this, "You are on " + currentPage + " of " + totalPages, Toast.LENGTH_LONG).show();
    webview.loadDataWithBaseURL("http://netdna.bootstrapcdn.com/bootstrap/2.3.2/css/bootstrap.min.css", e.html(), "text/html", "utf-8", null);
    return;
}

在这里,要让它工作,你应该做

catch (IndexOutOfBoundsException ex){
    YourTopActivity.this.runOnUiThread(new Runnable()
    {
        currentPage=1;
        totalPages=1;
        Toast.makeText(Thread.this,"You are on "+currentPage+" of "+totalPages,Toast.LENGTH_LONG).

        show();

        webview.loadDataWithBaseURL("http://netdna.bootstrapcdn.com/bootstrap/2.3.2/css/bootstrap.min.css",e.html(),"text/html","utf-8",null);
    });
    return;
}

与使用UI元素的其他内容相同。

runOnUiThread文档。

此处需要YourTopActivity,因为您应该使用runOnUiThread的{​​{1}}方法并且您在Activity类内。

无论如何,您应该重新考虑使用onPostExecuteonPreExecute

的代码