0
我正在使用AsyncTask從網上抓取一些數據,但它在抓取數據時似乎仍掛着用戶界面。Android AsyncTask依然懸掛UI
我的代碼:https://gist.github.com/MasterEjay/10005933
的ThreadParse類是我的主類內部,initWebView方法也是主類裏面,不ThreadParse。
我正在使用AsyncTask從網上抓取一些數據,但它在抓取數據時似乎仍掛着用戶界面。Android AsyncTask依然懸掛UI
我的代碼:https://gist.github.com/MasterEjay/10005933
的ThreadParse類是我的主類內部,initWebView方法也是主類裏面,不ThreadParse。
您應該使用execute
方法啓動ASynctask。
隨着你的代碼,你只需在主線程中調用該方法。 execute
將爲Asynctask創建一個新線程。
public void initWebView(String link) {
ThreadParse parse = new ThreadParse();
parse.execute(link);
}
如果你真的需要做一些在doInBackground
的UI,你應該使用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
方法Activity
和你在Asynctask
類裏面。
無論如何,你應該重新考慮你的代碼中使用onPostExecute
和onPreExecute
當我嘗試了,我得到了一個「產生的原因:了java.lang.RuntimeException:無法創建內螺紋已不叫尺蠖處理程序。準備()「錯誤,當我試圖做一個吐司。 – user2833131
這是由於您無法從其他線程編輯UI所致。每次你需要使用UI使用runOnUIThread(或更好的,使用在UI線程中調用的onPostExecute/onPreExecute) –
不,我使用2.3或更高版本。你能給我一個如何使用runOnUIThread的例子嗎?沒有那種Android的經驗。 – user2833131