J'injecte JavaScript
à mon interface WebView
et une fois que j'arrive à mes méthodes natives que j'ai définies dans le fichier JavaScript
, si elle gèle le WebView
jusqu'à ce que je renvoie une valeur. Par exemple :
Dans cet exemple, le WebView
est bloqué pour le 8 secondes . J'ai également revérifié qu'il ne s'agit pas du thread principal, et ce n'est effectivement PAS le thread principal, donc je ne vois pas pourquoi cela gèlerait le thread principal. WebView
.
myWebView.addJavascriptInterface( new WebViewHandler.JavaScriptInterface(), "webCallHandler" );
public class JavaScriptInterface
{
@JavascriptInterface
public String jsToAndroidNativeFunc(String Data)
{
Callable<String> task = new Callable<String>() {
@Override
public String call() throws Exception {
try {
if( Looper.getMainLooper() == Looper.myLooper() )
Log.d("TAG","Main Thread");
else
Log.d("TAG","Not Main Thread");
TimeUnit.SECONDS.sleep(8); // the webview is now stuck during these 8 seconds
return "123";
}
catch (InterruptedException e) {
throw new IllegalStateException("task interrupted", e);
}
}
};
ExecutorService executor = Executors.newFixedThreadPool(1);
Future<String> future = executor.submit(task);
try {
return future.get();
}
catch (InterruptedException e) {
e.printStackTrace();
return "111";
} catch (ExecutionException e) {
e.printStackTrace();
return "111";
}
}
}