วิธีที่ดีที่สุดในการรีสตาร์ท Android ผ่านทางบรรทัดคำสั่ง (ระยะไกล) คืออะไร


29

ฉันกำลังมองหาวิธีที่ดีที่สุด / เป็นมิตรในการรีบูตอุปกรณ์ android 4.1.1 ที่รูทของฉัน ฉันพบวิธีแก้ไขปัญหาเหล่านี้แล้ว:

  • su -c "reboot" - ทำให้เกิดปัญหากับ wifi หลังจากรีสตาร์ทบนอุปกรณ์ของฉัน ... ฉันอ่านว่านี่อาจทำให้ระบบไฟล์หยุดชะงักในบางกรณี ... ไม่ทำงานผ่าน ssh สำหรับฉัน
  • toolbox reboot - ความกังวลแบบเดียวกันที่นี่ แต่ทำงานผ่าน ssh
  • reboot -d 8 -f - ทำให้เกิดปัญหาหลังจากรีสตาร์ทเช่นแอพบางตัวไม่เริ่มทำงาน
  • busybox killall system_server - "Hot Reboot" (ไม่ใช่การรีสตาร์ทระบบจริงๆ)
  • start|stop - เริ่ม / หยุด Android Runtime (ไม่ใช่การรีสตาร์ทระบบจริงๆ)

อุปกรณ์ทำอะไรอย่างแน่นอนเมื่อฉันกดปุ่มเปิด / ปิด (ฮาร์ดแวร์) ฉันคิดว่านั่นเป็นวิธีที่เป็นมิตรที่สุด


su -c "reboot"รันคำสั่งที่กำหนดไว้ใน reboot ไม่ได้เปลี่ยนไปมากในช่วงหลายปีที่ผ่านมา มันเรียกว่าซิงค์ ()เสมอจากนั้นรีบูทอุปกรณ์ นอกจากนี้ด้วยความมุ่งมั่นนี้เวอร์ชันที่ทันสมัยของยังยกเลิกการต่อเชื่อมระบบไฟล์ทั้งหมด Android 4.1.1 รวมถึงความมุ่งมั่นที่ฉันพูดถึงและดังนั้นฉันจึงไม่เห็นว่าใน Android 4.1.1 จะทำให้ระบบไฟล์เสียหายได้อย่างไร reboot.creboot.creboot.csu -c "reboot"
ลืมไม่ลง

เรียน acy: คำตอบที่ล่าช้าของ Firelord ( su -c 'am start -a android.intent.action.REBOOT') ใช้ได้กับฉันใน Android 4.1.2 และดูเหมือนว่าฉันจะเป็นคำตอบที่ดีที่สุด ถ้ามันเหมาะกับคุณบน Android 4.1.1 หรือถ้าคุณยุ่งเกินกว่าที่จะลองใช้งานกรุณาคลิกเครื่องหมายถูกสีเขียวเพื่อให้มันลอยไปด้านบนของส่วนคำตอบ
ลืม

คำตอบ:


13

ง่ายจริง ๆ :

  • Android กำลังปิดส่วนสำคัญของรันไทม์อย่างปลอดภัย
  • ระบบปฏิบัติการยังแพร่ภาพความตั้งใจที่จะบอกแอพและบริการให้ใกล้เคียงกันอย่างงดงาม ในทางกลับกันให้ล้างแคชข้อมูลทั้งหมดและการตั้งค่าที่ใช้ร่วมกันบันทึกสิ่งที่ไม่ควรไปยังฐานข้อมูล sqlite และอื่น ๆ

กล่าวอีกนัยหนึ่งแอพและบริการจะได้รับโอกาสในการทำความสะอาดอย่างเป็นระบบ

คำสั่งที่คุณลองใช้นั้นรุนแรงกว่า พวกเขาเลี่ยงผ่านกลไกความปลอดภัยเพื่อปิดเครื่องอย่างสง่างาม

Android ไม่ใช่ Linux ต่อ se ในแง่ของเวอร์ชันเดสก์ท็อปธรรมดาของ Linux ที่สามารถใช้คำสั่งเหล่านั้นเพื่อปิดระบบ Linux

อาจเป็นไปได้ที่จะสร้างสคริปต์ตัวตัดคำเช่นนี้:

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

คุณสามารถบันทึกสิ่งนี้safe_shutdown.shด้วยสิทธิ์อนุญาต 0755 ระยะทางของคุณอาจแตกต่างกันไปขึ้นอยู่กับโทรศัพท์มือถือและ ROM - ดังนั้นจึงไม่มีการรับประกันใด ๆ


ขอบคุณสำหรับคำอธิบายนี้! เป็นไปได้ไหมที่จะทำสิ่งนี้จากระยะไกลเช่นผ่าน ssh (ไม่ใช่ adb)?
acy

4
ฉันคิดว่าเขาต้องการทราบว่าเขาสามารถเลียนแบบการปิดปุ่มด้วยคำสั่ง
Flow

ถ้าที่ / ที่ปลอดภัยที่สุด / วิธีการที่เป็นมิตรที่ดีที่สุดที่จะปิดอุปกรณ์แล้วใช่ :)
ACY

@Flow adb reboot? ฉันไม่แน่ใจว่าปลอดภัยหรือไม่! อาจเป็นสคริปต์หุ้มรอบเพื่อส่งออกอากาศACTION_SHUTDOWNแล้วโทรadb reboot?
t0mm13b

ไม่แน่ใจว่าการออกอากาศACTION_SHUTDOWNจะทำสิ่งที่คุณต้องการเช่นกัน: "โดยปกติแล้วแอปจะไม่จำเป็นต้องจัดการสิ่งนี้เนื่องจากกิจกรรมเบื้องหน้าจะหยุดชั่วคราวเช่นกัน" ฟังดูเหมือนแอพส่วนใหญ่จะไม่รองรับ การหยุดกิจกรรมเพียงพอหรือไม่
Matthew อ่าน

12

อุปกรณ์ทำอะไรอย่างแน่นอนเมื่อฉันกดปุ่มเปิด / ปิด (ฮาร์ดแวร์) ฉันคิดว่านั่นเป็นวิธีที่เป็นมิตรที่สุด

คุณจะได้เห็นกล่องโต้ตอบพร้อมตัวเลือกในการปิดอุปกรณ์ (Android หุ้นไม่มีการรีบูต) ดูเหมือนว่าShutdownActivityจะถูกเรียกใช้เมื่อคุณกดปุ่ม Power นาน ๆ

อย่างไรก็ตามนี่คือสิ่งที่คุณสามารถลองจากระยะไกลหรือในเครื่อง แต่ใช้เฉพาะการเข้าถึงรูท:

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

มันจะทำการปิดอย่างงดงามตามด้วยการรีบูต ฉันกำลังมองหาเจตนาเมื่อฉันสังเกตเห็นได้ที่นี่นี่

วิธีการทดสอบบน Android 4.2.1, 5.0.2 และ 6.0.1 และควรทำงานสำหรับ Android 4.1.1เช่นกัน

ปรับปรุง

ทดสอบกับสต็อก Android 5.0 และ 6.0.1:

su -c 'svc power reboot'

ตามซอร์สโค้ดที่นี่ KitKat build ควรสนับสนุนคำสั่งด้วย


1
สิ่งที่ฉันต้องการ ฉันยังพบว่ามันแปลกที่มันบอกว่า "กำลังปิด ... " เมื่อมีค่าสำหรับข้อความรีบูต
ไซเรน

10
killall zygote

นี่จะฆ่าzygoteกระบวนการรูทและทำให้ระบบ Android รีเฟรช

สิ่งนี้ไม่ได้รีสตาร์ทฮาร์ดแวร์ของโทรศัพท์ของคุณเฉพาะกระบวนการ Android

ตามค่าเริ่มต้น (ใน Linux) คำสั่งkill/ killallจะให้กระบวนการปิดลงอย่างงดงามแม้ว่าจะขึ้นอยู่กับการใช้zygoteไม่ว่าจะเป็นการปิดแอป Android ที่ทำงานอยู่

หมายเหตุ: คุณต้องรันสิ่งนี้เป็นรูทไม่ว่าคุณจะใช้su -cเชื่อมต่อผ่าน SSH หรือ ADB หรือวิธีอื่น

ชื่ออื่นสำหรับการกระทำนี้:

  • รีบูตเครื่องนุ่ม
  • รีบูตเครื่องร้อน

ฉันสังเกตเห็นในอุปกรณ์บางอย่าง Wifi จะไม่เชื่อมต่ออย่างถูกต้องหลังจากคำสั่งนี้ (ดังนั้นฉันต้องปิดการใช้งาน Wifi รอสักครู่แล้วเปิดใช้งาน Wifi อีกครั้ง)
palswim

2
สำหรับผู้อ่าน: ในอมยิ้มวิธีมาตรฐานในการรีสตาร์ทกรอบ Android am restartเป็น ต้องใช้การเข้าถึงรูท
Firelord

ไม่killall zygoteให้กระบวนการเป็นวิธีที่สง่างามที่จะปิดตัวลง? คำถามที่น่าสนใจ ใครบางคนจะต้องดูzygoteซอร์สโค้ดเพื่อที่จะรู้
ลืมไม่ลง
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.