Я ищу лучший / самый дружественный способ перезагрузить мое рутированное устройство Android 4.1.1. Я нашел эти решения до сих пор:
su -c "reboot"
- Вызывает проблемы с Wi-Fi после перезагрузки на моем устройстве ... Я прочитал, что это может вызвать прерывание файловой системы в некоторых случаях ... Не работает через ssh для меня.toolbox reboot
- То же самое касается и здесь, но работает через ssh.reboot -d 8 -f
- вызывает проблемы после перезапуска, например, некоторые приложения не запускаютсяbusybox killall system_server
- «Горячая перезагрузка» (на самом деле не перезагрузка системы)start|stop
- Запускает / останавливает Android Runtime (на самом деле не перезагрузка системы)
Что именно делает устройство, когда я нажимаю (аппаратную) кнопку питания? Я думаю, это самый дружелюбный способ.
su -c "reboot"
запускаетreboot
команду, которая определена вreboot.c
.reboot.c
не сильно изменился за эти годы. Он всегда вызывал sync () и затем перезагружал устройство. Кроме того, благодаря этой фиксации , современные версииreboot.c
также размонтируют все файловые системы. Android 4.1.1 включает в себя коммит, о котором я упоминал, и поэтому я не понимаю, какsu -c "reboot"
на Android 4.1.1 может вызвать повреждение файловой системы.su -c 'am start -a android.intent.action.REBOOT'
) работает для меня на Android 4.1.2, и мне кажется, что это лучший из существующих ответов. Если это работает для вас на Android 4.1.1, или если вы слишком заняты, чтобы попробовать его, пожалуйста, нажмите зеленую галочку, чтобы она всплыла в верхней части раздела ответов.Ответы:
Просто, правда:
Другими словами, приложениям и сервисам предоставляется возможность систематически выполнять их очистку.
Команды, которые вы пробовали, жестче. Они фактически обходят механизмы безопасности для постепенного отключения.
Android - это не Linux как таковой, в смысле обычной настольной версии Linux, где эти команды могут быть выполнены для отключения среды Linux.
Может быть возможно создать скрипт-обертку, такой как этот:
Вы можете сохранить это как
safe_shutdown.sh
, с разрешениями 0755. Ваш пробег может варьироваться, в зависимости от телефонов и ПЗУ - так что никаких гарантий там нет.источник
adb reboot
? Я не уверен, что это безопасно!?! Может быть, сценарий обертки вокруг него, чтобы отправить трансляцию, аACTION_SHUTDOWN
затем позвонитьadb reboot
?ACTION_SHUTDOWN
будет делать то, что вы хотите: «Приложения обычно не должны обрабатывать это, так как активность на переднем плане также будет приостановлена». Похоже, что большинство приложений, поэтому не будут справляться с этим. Достаточно ли приостановить деятельность?Вы увидите диалоговое окно с возможностью выключить устройство (в Android нет перезагрузки). Похоже, что ShutdownActivity вызывается при длительном нажатии кнопки питания.
В любом случае, это то, что вы можете попробовать удаленно или локально, но только с правами root:
Это сделает постепенное выключение с последующей перезагрузкой. Я искал намерение, когда заметил это здесь .
Метод испытания на Android 4.2.1, 5.0.2 и 6.0.1 , и должны работать на Android 4.1.1 , а также
Обновить
Протестировано на складе Android 5.0 и 6.0.1:
За исходный код здесь , KitKat строит также должны поддерживать команду.
источник
Это уничтожит корневой
zygote
процесс и приведет к обновлению системы Android.Это не перезагружает аппаратное обеспечение вашего телефона, только процессы Android.
По умолчанию (в Linux) команды
kill
/killall
дают процессам изящный способ завершить работу, хотя это зависит от реализации zygote , из-за чего это, в свою очередь, корректно завершает работу ваших приложений Android.Примечание: вы должны запустить это как root, независимо от того, используете ли вы
su -c
, подключаться через SSH или ADB, или другим способом.Другие названия для этого действия:
источник
am restart
. Это требует корневого доступа, хотя.killall zygote
процессы изящный способ завершить работу? Интересный вопрос. Кто-то должен будет взглянуть наzygote
исходный код, чтобы узнать.