Supongamos que está dentro de un fragmento y que está haciendo getActrivity().runOnUIThread(...)
en el código de interfaz de Javascript. Es posible que para el momento en que WebViewCoreThread ejecute el código de la interfaz de Javascript, el fragmento se separe de la actividad y getActivity() devolverá un valor nulo que dará como resultado una excepción NullPointerException. Una forma segura de hacerlo es utilizar un controlador como se muestra en el siguiente ejemplo. Además, asegúrese de que la interfaz de JavaScript use WeakReferences para los componentes de la interfaz de usuario en caso de que sea necesario recolectarlos antes de que se ejecute la interfaz de Javascript.
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");
¡Muchas gracias! Eso hizo un truco :) –
Siempre puedes hacer 'new Handler (Looper.getMainLooper())' para hacer que Handler use el hilo de UI. – ImMathan