ทำไม“ adb reboot” ปิดโทรศัพท์ของฉันเร็วกว่าปกติมากก่อนที่จะทำการ reboots? มันข้ามขั้นตอนสำคัญหรือไม่


13

ฉันเป็นเจ้าของ Samsung Galaxy S Relay 4G ที่ใช้ Android 4.1.2 นอกจากนี้ฉันยังได้ติดตั้งadbบนพีซี

เมื่อฉันกดปุ่ม Power ค้างไว้แล้วแตะ "เริ่มใหม่" โทรศัพท์ของฉันจะใช้เวลาประมาณสิบวินาทีในการปิดเครื่อง จากนั้นมันจะรีบูทตัวเอง

เมื่อฉันเข้ามาadb rebootแทนโทรศัพท์จะปิดเร็วกว่ามากการปิดเครื่องใช้เวลาเพียงเสี้ยววินาที จากนั้นจะเริ่มต้นใหม่

คำถามของฉัน:

  1. ทำไมadb rebootเร็วกว่านี้มาก?

  2. มันเป็นเพียงการข้ามภาพเคลื่อนไหวการปิดตัวดำเนินการเครือข่ายมือถือหรือข้ามขั้นตอนที่สำคัญกว่าด้วยหรือไม่

  3. ฉันสามารถใช้adb rebootทุกครั้งที่ต้องการรีบูทโทรศัพท์หรือมีข้อเสียในการทำเช่นนั้นหรือไม่?

  4. (ไม่บังคับ) คุณรู้ได้อย่างไร


ข้อมูลเพิ่มเติม (คุณสามารถข้ามสิ่งนี้ได้)

ฉันได้ทำการวิจัยก่อนโพสต์คำถามนี้ แต่ฉันก็ยังไม่ได้รับความสว่าง ผมขอแสดงสิ่งที่ฉันไม่พบ

เท็ตสึยูกิโคบายาชิแห่ง บริษัท เกียวโตไมโครคอมพิวเตอร์อธิบายในสไลด์ที่ 8 ของสไลด์โชว์ PDFที่ adb ประกอบด้วยสามส่วนคือไคลเอนต์เซิร์ฟเวอร์และภูต ไคลเอนต์และเซิร์ฟเวอร์ทำงานบนพีซี ภูตทำงานบนโทรศัพท์ ในสไลด์ 11 เขาอธิบายว่าทั้งสามส่วนถูกสร้างขึ้นจากไดเรกทอรีต้นทางเดียว (เป็นไดเรกทอรีนี้)

ฉันลองค้นหาในไดเรกทอรีต้นทางเพื่อหาคำrebootและอ่านส่วนของservices.cppแต่ฉันก็ยังไม่สามารถคิดได้ว่าสิ่งที่adb rebootจริงหรือไบต์ที่ส่งผ่านสายหรือสิ่งที่รหัสโทรศัพท์ทำงานเมื่อมัน รับไบต์เหล่านั้น ฉันยังไม่ได้คิดคำตอบสำหรับคำถามของฉัน


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


ดูเหมือนว่าคล้ายกันมากกับสิ่งที่setprop sys.powerctl rebootจะทำ การปิดระบบไม่สะอาดตามด้วยคำแนะนำในการรีบู๊ต
Firelord

คำตอบ:


7

ขึ้นอยู่กับพื้นที่เก็บข้อมูลที่คุณเชื่อมโยงดังกล่าวผมคิดว่าที่สำคัญคือในplatform/system/core libcutils/android_reboot.cและคำจำกัดความที่สำคัญอยู่ในinclude/cutils/android_reboot.h; กล่าวคือ:

    /* Commands */
    #define ANDROID_RB_RESTART  0xDEAD0001
    #define ANDROID_RB_POWEROFF 0xDEAD0002
    #define ANDROID_RB_RESTART2 0xDEAD0003

โดยปกติจะอยู่ในโหมดรีบูตปกติ (โดยใช้ปุ่มอุปกรณ์ ฯลฯ ) กระบวนการนี้ใช้เวลานานขึ้นเพราะ (ฉันถือว่า) มันจะเพิ่มพาร์ติชั่นฆ่าแอปพลิเคชั่นทั้งหมดปิดโหนด fopen ทั้งหมดเช่นในกระบวนการปิดระบบ adb rebootสามารถเทียบกับลินุกซ์คำสั่งรีบูต (จากที่มา): มันเป็นเพียงแค่วูบวาบดิสก์และรีบูตเข้าสู่กระบวนการโดยไม่ต้องฆ่าแรกหรือ filesystems unmounting ฉันเห็นคำสั่ง remount ที่รวดเร็วเพื่อวางดิสก์ (ในส่วนของอุปกรณ์เก็บข้อมูลของระบบ) ในโหมด ro ก่อนรีบูต

ฉันยังเชื่อว่าคำสั่งที่ออกkernel_restart()ซึ่งฝังอยู่ในเคอร์เนล ดูตัวอย่างhttp://www.phonesdevelopers.com/1730094/ ตรวจสอบการmachine_restartโทร


1
+1 ขอบคุณมาก! มันปลอดภัยสำหรับฉันที่จะทำadb rebootทุกวันแม้ว่ามันจะไม่ทำขั้นตอนการปิดเครื่องอย่างสมบูรณ์หรือไม่?
unforgettableidSupportsMonica

ไม่เจ็บ แต่คุณอาจมีเหตุผลที่ดีในการทำเช่นนั้น หากคุณต้องการล้างข้อมูลแคชบางส่วนมีวิธีแก้ไขปัญหาอื่นอยู่แล้ว
user3344236

โซลูชันอื่น ๆ เช่น ...
JohnyTex

2

ผู้ใช้ Stack Exchange รายอื่นได้ตอบคำถามนี้แล้วในโพสต์ที่อื่น

t0mm13b เขียนสิ่งนั้นในขณะที่แสดงภาพเคลื่อนไหวการปิดระบบของผู้ให้บริการ:

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

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

[คำสั่งเช่นadb reboot] รุนแรงขึ้น พวกเขาเลี่ยงผ่านกลไกความปลอดภัยเพื่อปิดเครื่องอย่างสง่างาม

ที่อื่น Yury เสนอคำอธิบายเกี่ยวกับสิ่งที่ Android ทำในระหว่างการปิดระบบที่สง่างาม:

  • มันปิดตัวลง ActivityManager ฉันคิดว่าการปิดตัวจัดการกิจกรรมหมายความว่ากิจกรรมทั้งหมดจะผ่านวงจรชีวิตที่จำเป็นและดังนั้นสถานะของกิจกรรมจะถูกเก็บไว้ แต่ฉันไม่แน่ใจ. ฉันไม่ได้ตรวจสอบ
  • จากนั้น Android จะปิดอินเทอร์เฟซวิทยุมือถือ
  • หลังจากนั้นจะปิด Bluetooth
  • ในที่สุดก็พยายามปิด MountService ลง

adb reboot เร็วกว่าเพราะข้ามบางอย่างหรือทั้งหมดข้างต้น

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