0

운영자가이 질문을 중복으로 표시하기 전에 스택의 모든 관련 문제를 읽고 질문에 대해 아무 것도보고하지 않았습니다. 웹보기와 AsyncTask를 사용하려고 시도하는AsyncTask WebView에서 로컬 파일로드

나는 데 문제가, 좋아, 코드 doInBackground()에서

final WebView webNISR = (WebView) findViewById(R.id.web_NISR); 
     final WebSettings webS_NISR = webNISR.getSettings(); 
     AsyncTask<Void, Void, Void> task = new AsyncTask<Void, Void, Void>() { 
      @Override 
      protected void onPreExecute(){ 
       webNISR.setVisibility(View.GONE); 
       // I left webNISR.loadUrl here for test, but it keeps processing slow, nothing changes! 
       webNISR.loadUrl(getString(R.string.waytofile)+"file.html"); 
      } 
      @Override 
      protected Void doInBackground(Void... params) { 
       webS_NISR.setJavaScriptEnabled(true); 
       webS_NISR.setDomStorageEnabled(true); 
       //webNISR.loadUrl(params); 
       return null; 
      } 
      @Override 
      protected void onPostExecute(Void result){ 
       webNISR.setVisibility(View.VISIBLE); 
      } 
     }; 

에게 그냥 할 처리를 팔로우하세요!

하지만 난 항상 오류, 내부 webNISR.loadUrl()를 사용할 수 없습니다 "방법 loadUrl은 UI 또는 UI 스레드에서 호출해야합니다, 현재 추정 스레드는 노동자이다", 그러나 나는이 과정에 대한 AsyncTask를 사용하고있는 경우 다른 스레드에서 수행하고 UIThread를로드하지 마십시오 (응용 프로그램이 느리게 종료 됨).

보기를 변경하는 모든 내용이 onPostExecute() 또는 onPreExecute()이어야하며, 활동로드가 느려지는 webNISR.loadUrl()이 아닌 것으로 알고 있습니다.

성능 향상이 있거나 페이지를로드 할 수 있도록 WebView 렌더링을 "포함"해야합니다.

약 7 개의 WebView가 있으므로 작업로드가 필요하다는 것을 언급 할 가치가 있습니다.

참고 : WebViews는 (그들 만이 그 로컬 파일을로드 할 수 있습니다)

나는 더 이상 내가이 전투로 일 오전 무엇을 해야할지하지 바꾸어 놓을 수 있습니다 :/

어떤 질문을 환영합니다!

감사합니다.

답변

0

webView.loadUrl()은 비동기식입니다. 즉시 반환되고 WebView는 자체 스레드에서 계속 작동합니다. 따라서 AsyncTask은 필요하지 않습니다. AsyncTask을 유지하면 상당한 성능 향상이 추가 될지 의심 스럽습니다.

WebView으로 설정하고 setWebViewClient을 사용하고 onPageFinished 메서드를 재정의 할 수 있습니다. 웹 뷰가 onPageFinished 콜백 내부 로딩을 마쳤 으면 어떻게할까요?

final WebView webNISR = (WebView) findViewById(R.id.web_NISR); 
webNISR.setVisibility(View.GONE); 

webNISR.getSettings().setJavaScriptEnabled(true); 
webNISR.getSettings().setDomStorageEnabled(true); 
webNISR.loadUrl(getString(R.string.waytofile)+"file.html"); 

webview.setWebViewClient(new WebViewClient() { 
    public void onPageFinished(WebView view, String url) { 
     webNISR.setVisibility(View.VISIBLE); 
    } 
}); 
+0

나는 이미 내가 모두로드되었을 때 모든 사람들이 볼 수 있도록하는 컨트롤러를 만들려고, 또는 페이지가 같은 방식으로 불안정 유지 같은없이이 방법을 시도했지만 어떤 이유로이 값 불가능 접근입니다 'onPageFinished()'메소드에서 포함 된 변수의 값. 원한다면 질문을 편집하고 이미이 방법으로 시도한 것을 추가 할 것입니다. –

관련 문제