웹에서 일부 데이터를 가져 오는 데 AsyncTask를 사용하지만 데이터를 가져 오는 동안 여전히 UI가 멈춰있는 것 같습니다.Android AsyncTask가 여전히 UI를 걸고 있습니다.
내 코드 : https://gist.github.com/MasterEjay/10005933
ThreadParse 클래스 내 메인 클래스의 내부이며, initWebView 방법은 메인 클래스의 내부 또한, ThreadParse 없습니다.
웹에서 일부 데이터를 가져 오는 데 AsyncTask를 사용하지만 데이터를 가져 오는 동안 여전히 UI가 멈춰있는 것 같습니다.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에 뭔가를 할 필요가 당신이
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;
}
여기
, 당신을 일을 수 있도록 내가 예제로이 코드 블록을 taked runOnUIThread
사용해야하는 경우 해야한다
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
는 당신이 Activity
의 runOnUiThread
방법을 사용해야하기 때문에 필요하고 당신은 Asynctask
클래스 내부에있다. java.lang.RuntimeException가 : 루퍼를 호출하지 스레드 내부 핸들러를 만들 수 없습니다
어쨌든, 당신은 내가 내가 "에 의한 가지고 있다고했을 때 onPostExecute
및 onPreExecute
를 사용하도록 코드를 다시 생각해야한다. prepare() "토스트 만들기를 시도 할 때 오류가 발생했습니다. – user2833131
다른 스레드에서 UI를 편집 할 수 없기 때문에 발생합니다. UI를 사용하여 작업해야 할 때마다 runOnUIThread (또는 더 좋으며 UI 스레드에서 호출되는 onPostExecute/onPreExecute 사용) –
아니요, 2.3 이상을 사용하고 있습니다. runOnUIThread를 사용하는 방법에 대한 예를 들어 줄 수 있습니까? 안드로이드에 익숙하지 않습니다. – user2833131