У меня есть пользовательский интерфейс, частично основанный на сети (WebView). Он подключен к пользовательскому интерфейсу Android через интерфейс Javascript. Когда вы нажимаете на элемент в WebView, javascript вызывает Android, а Android получает вызов в javascript/веб-потоке. Не поток пользовательского интерфейса (основной).
Он появляется в Android менее чем за 1 миллисекунду. Нет проблем. Однако, поскольку я хочу изменить пользовательский интерфейс, мне нужно переключиться на поток пользовательского интерфейса. (Android выдает исключение, если вы изменяете пользовательский интерфейс вне основного потока). В настоящее время я использую обработчик в потоке пользовательского интерфейса и вызываю post().
Затем этот код (Runnable) вызывается где-то между 120 и 300 мс позже. Это очень заметное отставание пользовательского интерфейса от прикосновения пользователя.
Есть ли способ ускорить выполнение кода в потоке пользовательского интерфейса? Вот пример кода:
Класс интерфейса:
public class JSInterface {
public void test() {
// Arrives here in 1ms after calling AndroidInterface.test(). Arrives n the web thread.
runOnUiThread(new Runnable() {
@Override
public void run() {
// Arrives here 100ms to 300ms after calling AndroidInterface.test(). Arrives on the main (UI) thread.
}
});
}
}
Добавлен в веб-просмотр следующим образом:
webview.addJavascriptInterface(new JSInterface(), "AndroidInterface");
Вызывается в javascript следующим образом:
AndroidInterface.test();
Спасибо!