Как обрабатывать невыполненные запросы пользовательского интерфейса на Android
Я обрабатываю инструкции пользовательского интерфейса на виртуальной машине (на самом деле V8) на Android в основном потоке пользовательского интерфейса. Это отлично работает. Тем не менее, теперь я добавляю отладчик JavaScript в смесь (Stetho в моем случае). Я могу приостановить поток пользовательского интерфейса при достижении точки останова и даже выполнить инструкции. Однако когда инструкция изменяет пользовательский интерфейс, пользовательский интерфейс не обновляется немедленно. Вместо этого представление становится недействительным, и только когда основной цикл обработки событий продолжит обработку, обновления будут отображаться.
Поэтому мой вопрос заключается в том, можно ли принудительно перерисовать все устройство из потока пользовательского интерфейса, не возвращаясь в основной цикл? Если я вернусь к основному циклу, то переверну весь стек вызовов, и пауза во время отладки больше не будет работать.
Я попытался получить основной Looper, и я даже могу вызвать для него Loop() (в идеале, чтобы начать обработку событий), но тогда это станет основным циклом (и вы не сможете выйти из основного петлителя). Если у кого-то есть мысли о том, как смоделировать основной цикл событий, это будет с благодарностью.
1 ответ
Это весело, я делаю то же самое, что и вы, создавая мост между J2V8 и Stetho. Хитрость заключается в том, чтобы запустить отладчик в своем собственном потоке. Поскольку отладчик будет иметь прямой доступ к V8, он может легко манипулировать средой выполнения, но команды, идущие на собственный код (например, команды пользовательского интерфейса), будут выполняться в главном потоке до тех пор, пока они не вернутся к среде исполнения V8.