Cách tốt nhất để khởi động lại Android thông qua dòng lệnh (từ xa) là gì?


29

Tôi đang tìm cách tốt nhất / thân thiện nhất để khởi động lại thiết bị Android 4.1.1 đã root của mình. Tôi tìm thấy những giải pháp cho đến nay:

  • su -c "reboot" - Gây ra sự cố với wifi sau khi khởi động lại trên thiết bị của tôi ... Tôi đọc được rằng điều này có thể gây ra hệ thống tệp bị hỏng trong một số trường hợp ... Không hoạt động qua ssh cho tôi.
  • toolbox reboot - Cùng quan tâm ở đây, nhưng hoạt động thông qua ssh.
  • reboot -d 8 -f - gây ra sự cố sau khi khởi động lại, ví dụ như một số ứng dụng sẽ không khởi động
  • busybox killall system_server - "Khởi động lại nóng" (không thực sự khởi động lại hệ thống)
  • start|stop - Bắt đầu / dừng Android Runtime (không thực sự khởi động lại hệ thống)

Thiết bị đang làm gì chính xác khi tôi nhấn nút nguồn (phần cứng)? Tôi đoán đó là cách thân thiện nhất.


su -c "reboot"chạy rebootlệnh, được định nghĩa trong reboot.c. reboot.cđã không thay đổi nhiều trong những năm qua. Nó luôn được gọi là sync () và sau đó khởi động lại thiết bị. Ngoài ra, nhờ vào cam kết này , các phiên bản hiện đại của reboot.cunmount tất cả các hệ thống tập tin. Android 4.1.1 bao gồm các cam kết mà tôi đã đề cập và vì vậy tôi không thấy làm thế nào su -c "reboot"trên Android 4.1.1 có thể gây ra tham nhũng hệ thống tệp.
không thể nào quên

Acy thân mến: Câu trả lời muộn của Firelord ( su -c 'am start -a android.intent.action.REBOOT') hoạt động với tôi trên Android 4.1.2 và dường như tôi là câu trả lời hay nhất trong số các câu trả lời hiện có. Nếu nó hoạt động cho bạn trên Android 4.1.1 hoặc nếu bạn quá bận để dùng thử, vui lòng nhấp vào dấu kiểm màu xanh lá cây để làm cho nó nổi lên trên cùng của phần câu trả lời.
không thể nào quên

Câu trả lời:


13

Đơn giản, thực sự:

  • Android đang tắt các phần quan trọng của thời gian chạy một cách an toàn.
  • HĐH cũng đang phát sóng ý định để nói với các ứng dụng và dịch vụ đóng một cách duyên dáng. Đến lượt chúng, lưu trữ bộ nhớ cache của tất cả dữ liệu và các tùy chọn chia sẻ, lưu những gì không có vào cơ sở dữ liệu sqlite, et cetera.

Nói cách khác, các ứng dụng và dịch vụ được tạo cơ hội để dọn dẹp một cách có hệ thống.

Các lệnh mà bạn đã thử là khắc nghiệt hơn. Họ thực sự bỏ qua các cơ chế an toàn để tắt máy duyên dáng.

Android không phải là Linux, theo nghĩa của một phiên bản Linux dành cho máy tính để bàn thông thường, nơi các lệnh đó có thể được ban hành để tắt môi trường Linux.

Có thể tạo tập lệnh bao bọc như thế này:

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

Bạn có thể lưu cái này dưới dạng safe_shutdown.sh, với quyền 0755. Số dặm của bạn có thể thay đổi, tùy thuộc vào thiết bị cầm tay và ROM - vì vậy không có gì đảm bảo ở đó.


cảm ơn vì sự khám phá này có thể làm điều này từ xa, ví dụ như thông qua ssh (không phải adb)?
acy

4
Tôi nghĩ rằng anh ta muốn biết làm thế nào anh ta có thể bắt chước việc tắt nút bằng một lệnh.
Lưu lượng

nếu đó là cách thân thiện nhất / an toàn nhất / tốt nhất để tắt thiết bị, thì có :)
acy

@Flow adb reboot? Tôi không chắc chắn nếu điều đó an toàn!?! Có lẽ một kịch bản bao bọc xung quanh nó để gửi một phát sóng ACTION_SHUTDOWNsau đó gọi adb reboot?
t0mm13b

Không chắc chắn việc phát sóng ACTION_SHUTDOWNsẽ làm những gì bạn muốn: "Các ứng dụng thường sẽ không cần phải xử lý việc này, vì hoạt động nền trước cũng sẽ bị tạm dừng." Âm thanh như hầu hết các ứng dụng do đó sẽ không xử lý nó. Là tạm dừng hoạt động đủ?
Matthew Đọc

12

Thiết bị đang làm gì chính xác khi tôi nhấn nút nguồn (phần cứng)? Tôi đoán đó là cách thân thiện nhất.

Bạn có thể thấy một hộp thoại với tùy chọn tắt nguồn thiết bị (stock Android không cung cấp khởi động lại). Dường như ShutdownActivity được gọi khi bạn nhấn nút Nguồn.

Dù sao, đây là những gì bạn có thể thử, từ xa hoặc cục bộ, nhưng chỉ với quyền truy cập root:

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

Nó sẽ thực hiện một tắt máy duyên dáng sau khi khởi động lại. Tôi đang tìm kiếm một ý định khi tôi nhận thấy nó ở đây .

Phương pháp được thử nghiệm trên Android 4.2.1, 5.0.2 và 6.0.1 và nên làm việc cho Android 4.1.1 cũng

Cập nhật

Đã thử nghiệm trên Android 5.0 và 6.0.1:

su -c 'svc power reboot'

Theo mã nguồn ở đây , các bản dựng KitKat cũng sẽ hỗ trợ lệnh.


1
Chính xác những gì tôi cần. Tôi vẫn thấy kỳ lạ là nó nói "Tắt nguồn ..." khi có các giá trị cho văn bản khởi động lại.
Còi báo

10
killall zygote

Điều này sẽ giết zygotequá trình root và làm mới hệ thống Android.

Điều này không khởi động lại phần cứng điện thoại của bạn, chỉ các quá trình Android.

Theo mặc định (trong Linux), các lệnh kill/ killallcung cấp cho các quy trình một cách duyên dáng để tắt, mặc dù điều này phụ thuộc vào việc triển khai hợp tử cho dù điều này lần lượt tắt các ứng dụng Android đang chạy của bạn một cách duyên dáng.

Lưu ý: bạn phải chạy cái này với quyền root, cho dù bạn sử dụng su -c, kết nối qua SSH hay ADB hay phương thức khác.

Tên khác cho hành động này:

  • khởi động lại mềm
  • khởi động lại nóng

Tôi đã nhận thấy trên một số thiết bị, Wifi sẽ không kết nối lại đúng sau lệnh này (vì vậy tôi phải tắt Wifi, đợi một phút và sau đó bật lại Wifi).
palswim 18/03/2015

2
Đối với độc giả: Trong Lollipop, cách tiêu chuẩn để khởi động lại khung Android là am restart. Điều này đòi hỏi quyền truy cập root mặc dù.
Firelord

Liệu killall zygotecung cấp cho các quy trình một cách duyên dáng để tắt? Câu hỏi thú vị. Ai đó sẽ phải nhìn vào zygotemã nguồn để biết.
không thể nào quên
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.