Apa cara terbaik untuk me-restart Android melalui command line (jarak jauh)?

29

Saya mencari cara terbaik / ramah untuk me-reboot perangkat Android 4.1.1 saya yang sudah di-root. Saya menemukan solusi ini sejauh ini:

  • su -c "reboot" - Menyebabkan masalah dengan wifi setelah restart pada perangkat saya ... Saya membaca bahwa ini dapat menyebabkan sistem file currupt dalam beberapa kasus ... Tidak berfungsi melalui ssh untuk saya.
  • toolbox reboot - Kekhawatiran yang sama di sini, tetapi bekerja melalui ssh.
  • reboot -d 8 -f - Menyebabkan masalah setelah restart misalnya beberapa aplikasi tidak akan mulai
  • busybox killall system_server - "Hot Reboot" (tidak benar-benar restart sistem)
  • start|stop - Memulai / menghentikan Android Runtime (bukan benar-benar sistem restart)

Apa yang sedang dilakukan perangkat saat saya menekan tombol daya (perangkat keras)? Saya kira itu cara yang paling ramah.

acy
sumber
su -c "reboot"menjalankan rebootperintah, yang didefinisikan dalam reboot.c. reboot.ctidak banyak berubah selama bertahun-tahun. Itu selalu disebut sinkronisasi () dan kemudian reboot perangkat. Selain itu, berkat komitmen ini , versi modern reboot.cjuga meng-unmount semua sistem file. Android 4.1.1 termasuk komit yang saya sebutkan, dan jadi saya tidak melihat bagaimana su -c "reboot"pada Android 4.1.1 bisa menyebabkan korupsi sistem file.
tak terlupakan
Acy yang terhormat: Jawaban terlambat Firelord ( su -c 'am start -a android.intent.action.REBOOT') berfungsi untuk saya di Android 4.1.2, dan bagi saya sepertinya yang terbaik dari jawaban yang ada. Jika itu bekerja untuk Anda di Android 4.1.1, atau jika Anda terlalu sibuk untuk mencobanya, silakan klik tanda centang hijau untuk membuatnya mengapung ke bagian atas bagian jawaban.
tak terlupakan pada

Jawaban:

13

Sederhana, sungguh:

  • Android dengan aman mematikan bagian-bagian penting dari runtime.
  • OS juga menyiarkan maksud untuk memberi tahu aplikasi dan layanan agar ditutup dengan anggun. Ini, pada gilirannya, menghapus cache semua data dan preferensi bersama, menyimpan apa yang tidak boleh ke database sqlite, dan lain-lain.

Dengan kata lain, aplikasi dan layanan diberi kesempatan untuk melakukan pembersihan secara sistematis.

Perintah yang telah Anda coba lebih keras. Mereka benar-benar melewati mekanisme keselamatan untuk shutdown yang anggun.

Android bukan Linux semata, dalam arti versi desktop Linux biasa di mana perintah-perintah itu dapat dikeluarkan untuk mematikan lingkungan Linux.

Dimungkinkan untuk membuat skrip wrapper seperti ini:

#!/system/bin/sh
am broadcast android.intent.action.ACTION_SHUTDOWN
sleep 5
reboot

Anda dapat menyimpan ini sebagai safe_shutdown.sh, dengan izin 0755. Jarak tempuh Anda dapat bervariasi, tergantung pada handset dan ROM - jadi tidak ada jaminan di sana.

t0mm13b
sumber
terima kasih untuk penjelajahan ini! apakah mungkin untuk melakukan ini dari jarak jauh misalnya via ssh (bukan adb)?
acy
4
Saya pikir dia ingin tahu bagaimana dia bisa meniru penutupan tombol dengan perintah.
Aliran
jika itu cara yang paling ramah / paling aman / terbaik untuk mematikan perangkat, maka ya :)
acy
@ Aliran adb reboot? Saya tidak yakin apakah itu aman!?! Mungkin skrip pembungkus di sekitarnya untuk mengirim siaran ACTION_SHUTDOWNlalu menelepon adb reboot?
t0mm13b
Tidak yakin penyiaran ACTION_SHUTDOWNakan melakukan apa yang Anda inginkan: "Aplikasi biasanya tidak perlu menangani ini, karena aktivitas latar depan akan dijeda juga." Karena itu, sepertinya sebagian besar aplikasi tidak akan menanganinya. Apakah menjeda aktivitas cukup?
Matius Baca
12

Apa yang sedang dilakukan perangkat saat saya menekan tombol daya (perangkat keras)? Saya kira itu cara yang paling ramah.

Anda bisa melihat dialog dengan opsi untuk mematikan perangkat (stok Android tidak menawarkan reboot). Tampaknya ShutdownActivity dipanggil saat Anda lama menekan tombol Daya.

Bagaimanapun, ini adalah apa yang dapat Anda coba, dari jarak jauh atau lokal, tetapi hanya dengan akses root:

su -c 'am start -a android.intent.action.REBOOT'

Ini akan melakukan shutdown yang anggun diikuti oleh reboot. Saya mencari niat ketika saya melihatnya di sini .

Metode diuji pada Android 4.2.1, 5.0.2 dan 6.0.1 dan harus bekerja untuk Android 4.1.1 juga

Memperbarui

Diuji pada stok Android 5.0 dan 6.0.1:

su -c 'svc power reboot'

Per kode sumber di sini , build KitKat juga harus mendukung perintah.

Firelord
sumber
1
Apa yang saya butuhkan. Saya masih merasa aneh bahwa ia mengatakan "Mematikan ..." ketika ada nilai untuk teks reboot.
Sirene
10
killall zygote

Ini akan mematikan zygoteproses root dan menyebabkan penyegaran sistem Android.

Ini tidak memulai ulang perangkat keras ponsel Anda, hanya proses Android.

Secara default (di Linux), perintah kill/ killallmemberikan proses yang anggun cara untuk mematikan, meskipun itu tergantung pada implementasi zygote apakah ini pada gilirannya dengan anggun mematikan aplikasi Android Anda yang sedang berjalan.

Catatan: Anda harus menjalankan ini sebagai root, apakah Anda menggunakan su -c, terhubung melalui SSH atau ADB, atau metode lain.

Nama lain untuk tindakan ini:

  • reboot lembut
  • reboot panas
palswim
sumber
Saya perhatikan pada beberapa perangkat, Wifi tidak akan terhubung kembali dengan benar setelah perintah ini (jadi saya harus menonaktifkan Wifi, tunggu sebentar, dan kemudian aktifkan kembali Wifi lagi).
palswim
2
Untuk pembaca: Di Lollipop, cara standar untuk memulai ulang kerangka Android adalah am restart. Ini membutuhkan akses root.
Firelord
Apakah killall zygotememberi proses cara yang anggun untuk ditutup? Pertanyaan menarik. Seseorang harus melihat zygotekode sumber untuk mengetahui.
tak terlupakan