Android - ждать версии обновления пользовательского интерфейса - PullRequest
0 голосов
/ 15 марта 2019

Мое приложение не является приложением Play Store, оно используется для личных целей во встроенном устройстве.

В настоящее время я делаю это:

//pop up Toast to indicate command is running
if(m_currentToast != null)
{
m_currentToast.cancel();
}
m_currentToast = Toast.makeText(my_service, "command is running", Toast.LENGTH_SHORT);
m_currentToast.show(); //this doesn't popup immediately, but only popup after waitFor() below

//run command
Process proc = Runtime.getRuntime().exec(new String[] { "su", "-c", command });
proc.waitFor();

это будет waitFor до успешного выполнения команды.Эта команда будет работать от нескольких секунд до 1 минуты.Пример команды: pwd;sleep 5;pwd, если вы хотите проверить.

Но проблема в том, что любой предшествующий тост или плавающий оконный интерфейс не сможет всплыть во время выполнения этой команды.waitFor заморозить поток пользовательского интерфейса, не дожидаясь появления всплывающего окна.

В настоящее время мой код использует преимущества той же самой задачи асинхронного запуска, только если предыдущая асинхронная задача выполнена, поэтому это всегда одно направление в последовательности, например, задача загрузки -> выполнитьcommand -> download next -> run next command.

Поэтому я не могу просто поместить команду в фоновый процесс без изменения (или возможного прерывания) большого количества кода.

Затем я проверяюс плавающим окном, но оно появляется только после команды waitFor, такая же проблема, как у Toast.

У меня есть идея, такая как всплывающее дополнительное приложение для показа тостов, но это кажется излишним.

Так что мне интересно, есть ли ждать, пока существует версия обновления пользовательского интерфейса?Так что я могу сделать что-то вроде этого:

m_currentToast.show(); //popup toast
m_currentToast_process.waitFor(); //wait for toast popup/drawing done

//run command
Process proc = Runtime.getRuntime().exec(new String[] { "su", "-c", command });
proc.waitFor();
...