Я не собираюсь делать очень хорошую работу в этом, поскольку я едва могу затронуть предмет самостоятельно. Может быть, кто-то с большим знанием может go в деталях, но общая идея здесь состоит в том, что этот код вызывается потоком JS, а не вашим потоком пользовательского интерфейса (который является единственным потоком, которому разрешено обрабатывать обновления пользовательского интерфейса) ), и я удивлен, что этот код не делает sh, если честно. Метод post()
добавляет это в очередь сообщений представления, что означает, что текст будет обновлен ПОСЛЕ представления и не имеет других задач для выполнения. Я знаю, что плохо объяснил это, но для получения дополнительной информации, пожалуйста, обратитесь к ним:
Что именно делает метод записи?
Поочередно вы может ли пользователь runOnUIThread()
, пример:
Как мы используем runOnUiThread в Android?
Я уверен, что многие люди уже объяснили это лучше чем у меня. Но самое важное, что нужно понять, это то, что вы не должны обновлять пользовательский интерфейс из чего-либо кроме потока пользовательского интерфейса
Обратите внимание, что я выбрал myWebView
произвольно, и это должно работать, если опубликовано на основной вид фрагмента, а также.
class MyJavaScriptInterface {
@JavascriptInterface
@SuppressWarnings("unused")
public void processHTML(final String html) {
myWebview.post(new Runnable() {
@Override public void run() {
TextView text = findViewById(R.id.textView); text.setText(html);
}
});
}
}