Проблемы с надежностью при программном отключении корневого устройства - PullRequest
0 голосов
/ 10 апреля 2019

Одно из приложений, над которыми я работаю, - это локальное приложение, которое работает на корневых устройствах. Частью его функциональности является отключение устройства в какой-то момент.

Если я подключаюсь к устройству через adb, я могу выполнить следующую команду в корневой оболочке:

svc power shutdown 

Результатом этой команды является то, что на экране отображается диалоговое окно «выключение», и устройство выключается. Все хорошо, за исключением того, что эта команда не работает при выполнении в приложении:

Runtime.getRuntime().exec("su -c 'svc power shutdown'");

вышеупомянутый вызов ничего не делает, но затем, в некоторых случаях, устройство выключается после завершения процесса приложения (например, при переустановке приложения из AndroidStudio).

Итак, я попытался найти альтернативный подход и обнаружил, что работает следующее:

Runtime.getRuntime().exec("su -c 'reboot -p'");

вышеуказанный вызов приводит к немедленному отключению устройства. Немедленно = как вынуть батарею.

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

У меня есть два вопроса:

  1. Как сделать так, чтобы первый подход работал надежно (отключение питания svc)?

  2. Должен ли я действительно беспокоиться о несогласованности состояний и повреждении данных, если я перейду ко второму подходу (перезагрузка -p)?

Любая дополнительная информация / ссылки / рекомендации будут с благодарностью.

Спасибо

...