4

일부보기를 만들고 표시 할 준비가 된 스레드가 있습니다. 그 (것)들의 사이에서 나는 또한 WebView가있다. 이 코드는 스레드에서 실행됩니다스레드의 WebView를 만들 수 없습니다.

WebView lGraphWebView = null; 
     try{ 
      lGraphWebView = new WebView(AppController.getAppController()); 
     }catch (Exception e) { 
      Log.d("info", "error: " +e); 
     } 

하고 다음과 같은 예외가 발생합니다 : 내가 간단한 버튼을 만들 때 모두가 OK이기 때문에

java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare() 

이것은 조금 이상하다. 그럼, 누구든지 WebView 내가 왜이 예외를 얻을 수 창조에 explane 수 있다면 Looper.prepare() 여기 도울 수 있습니까? 미리 감사드립니다.

답변

7

, 그 안전하지를 메인 쓰레드의 외부보기를 만들 수 있습니다.

WebView은 UI 스레드와의 통신을 위해 해당 생성자에 Handler()을 생성하므로 특정 경우에는 허용되지 않습니다. 그러나 Handler의 기본 생성자가 현재 스레드에 연결하고 현재 스레드에 Looper이 실행되고 있지 않으므로이 예외가 발생합니다.

루퍼 스레드 (적어도 적어도 WebView만큼 길어야 함)를 만드는 것이 도움이 될지도 모르겠지만 실제로는 위험한 방법이라고 생각할 수 있습니다. 그리고 나는 그것을 추천하지 않을 것이다.

메인 스레드에 WebView을 생성해야합니다. 모든 컨트롤은 대개 항상 UI 스레드에서 만들어 지므로 빠른 구성을 위해 최적화되어 있습니다.

+0

빠른 답변 주셔서 감사합니다. – fox

1

기본 UI 스레드 이외의 스레드에서보기를 생성하거나 조작해서는 안됩니다. 예를 들어, 당신은 UI 스레드에 게시 할 Handler를 사용할 수 있습니다 일반적으로

private Handler handler = new Handler(); 

handler.post(new Runnable() { 
    public void run() { 
     lGraphWebView = new WebView(AppController.getAppController()); 
    } 
}); 
관련 문제