당신이 조각 안쪽에 당신이 당신의 자바 스크립트 인터페이스 코드에서 getActrivity().runOnUIThread(...)
을하고 가정을 사용하는 것입니다. WebViewCoreThread가 Javascript 인터페이스 코드를 실행하면 조각이 활동에서 분리되고 getActivity()가 null을 반환하여 NullPointerException이 던져 질 수 있습니다. 이 작업을 수행하는 안전한 방법은 아래 예제와 같이 처리기를 사용하는 것입니다. 또한 Javascript 인터페이스가 실행되기 전에 JavaScript 인터페이스에서 가비지 수집해야하는 경우 ui 구성 요소에 대해 WeakReferences를 사용하는지 확인하십시오.
myWebView.addJavascriptInterface(new Object() {
private Handler handler = new Handler();
private WeakReference<ProgressBar> progressBarRef = new WeakReference<ProgressBar>(
myWebViewProgressBar);
private WeakReference<WebView> myWebViewRef = new WeakReference<WebView>(
myWebView);
@SuppressWarnings("unused")
public void onFirstImageLoad() {
handler.post(new Runnable() {
@Override
public void run() {
ProgressBar progressBar = progressBarRef.get();
WebView webView = myWebViewRef.get();
if (progressBar != null) {
progressBar.setVisibility(View.GONE);
}
if (webView != null) {
webView .setVisibility(View.VISIBLE);
}
}
});
}
}, "jsInterface");
감사합니다. 그 트릭을 했어 :) –
핸들러가 UI 스레드를 사용하게하려면 언제나'new Handler (Looper.getMainLooper())'를 할 수있다. – ImMathan