Чому "перезавантаження adb" відключить мій телефон настільки швидше, ніж зазвичай, перш ніж він перезавантажується? Чи пропускає важливі кроки?


13

Я володію Samsung Galaxy S Relay 4G під управлінням Android 4.1.2. Також у мене на ПК встановлений adb .

Коли я довго натискаю кнопку живлення, потім натискаю "Перезапустити", для мого телефону потрібно відключити десять секунд. Потім він перезавантажується.

Коли я adb rebootзамість цього входжу , телефон вимикається набагато швидше: відключення займає лише секунду. Потім він перезавантажується.

Мої запитання:

  1. Чому adb rebootтак швидше?

  2. Це просто пропуск анімації відключення оператора мобільної мережі, або це також пропуск деяких важливіших процедур?

  3. Чи можу я використовувати adb rebootкожен раз, коли хочу перезавантажити телефон, чи є якийсь недолік у цьому?

  4. (Необов’язково) Як ви знаєте?


Більше інформації (ви можете пропустити це)

Я зробив кілька досліджень, перш ніж розміщувати це питання. Але я все ще непросвітлений. Дозвольте мені показати вам , що я зробив виявити.

Tetsuyuki Kobayashi з Kyoto Microcomputer Co. пояснює на слайді 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Можна порівняти з командою перезавантаження Linux (звідки він приходить): він просто промиває диск і ввести перезавантаження без перших процесів вбивства або размонтирования файлових систем. Я бачу також швидку команду повторного перезавантаження, видану для переведення диска (у нашому випадку в накопичувальну частину системи пристрою) в режим ro перед перезавантаженням.

Я також вважаю, що видана команда kernel_restart()є вбудованою в ядро. Див., Наприклад, http://www.phonesdevelopers.com/1730094/ . Також перевіряйте machine_restartдзвінки.


1
+1. Велике спасибі! Чи безпечно це робити adb rebootщодня, хоча це не буде робити процедуру повного відключення?
незабутнійідпідтримкаMonica

Це не боляче, але у вас можуть бути вагомі причини для цього. Якщо ви дійсно хочете очистити деякі кешовані дані, у будь-якому випадку є інші рішення.
користувач3344236

Інші рішення, такі як ...?
JohnyTex

2

Інші користувачі Stack Exchange вже відповіли на це запитання в публікаціях в інших місцях.

t0mm13b пише, що під час показу анімації відключення вашого оператора:

  • Android безпечно відключає життєво важливі частини часу виконання.
  • ОС також транслює наміри повідомити додаткам і службам витончено закрити. Вони, у свою чергу, стирають кеші всіх даних та спільних налаштувань, зберігаючи те, що є недоліком, у базі даних sqlite тощо.

Іншими словами, додаткам та службам надається можливість систематично проводити очищення.

[Такі команди, як adb reboot], суворіші. Вони фактично обходять безпечні механізми для витонченого відключення.

В іншому випадку Юрій пропонує ще одне пояснення того, що робить Android під час витонченого відключення:

  • Він вимикає ActivityManager. Я думаю, що вимкнення ActivityManager означає, що всі дії пройдуть необхідний життєвий цикл і, таким чином, стану діяльності будуть зберігатися. Але я не впевнений. Я не перевіряв.
  • Потім Android вимикає інтерфейс стільникового радіо.
  • Після цього він вимикає Bluetooth.
  • Нарешті, він намагається вимкнути MountService.

adb reboot швидше, тому що пропускає деякі або всі перераховані вище.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.