我使用AsyncTask从网上获取一些数据,但在获取数据时似乎仍然悬挂了UI。
我的代码:https://gist.github.com/MasterEjay/10005933
ThreadParse类在我的主类中,initWebView方法也在主类内,而不是ThreadParse。
答案 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元素的其他内容相同。
此处需要YourTopActivity
,因为您应该使用runOnUiThread
的{{1}}方法并且您在Activity
类内。
无论如何,您应该重新考虑使用onPostExecute
和onPreExecute