“adb reboot”가 재부팅되기 전에 왜 평소보다 훨씬 빨리 전화기를 종료합니까? 중요한 단계를 건너 뛰고 있습니까?


13

Android 4.1.2를 실행하는 Samsung Galaxy S Relay 4G를 소유하고 있습니다. 또한 PC에 adb가 설치되어 있습니다.

전원 버튼을 길게 누른 다음 "다시 시작"을 누르면 휴대 전화가 종료되는 데 약 10 초가 걸립니다. 그런 다음 재부팅됩니다.

adb reboot대신에 들어가면 전화기가 훨씬 빨리 종료됩니다. 종료에는 1 초 정도 걸립니다. 그런 다음 재부팅됩니다.

내 질문 :

  1. adb reboot그렇게 빨라요?

  2. 단순히 모바일 네트워크 사업자의 종료 애니메이션을 건너 뛰는가, 아니면 더 중요한 절차를 건너 뛰는가?

  3. adb reboot전화를 재부팅 할 때마다 매번 사용할 수 있습니까 ? 아니면 그렇게하는 데 어떤 단점이 있습니까?

  4. (선택 사항) 어떻게 알 수 있습니까?


더 많은 정보 (이것을 건너 뛸 수 있습니다)

이 질문을 게시하기 전에 몇 가지 조사를 수행했습니다. 그러나 나는 여전히 깨달았습니다. 제가 무엇을 보여주지 않았다 발견 할 수 있습니다.

Kyoto Microcomputer Co.의 Tetsuyuki Kobayashi는 이 PDF 슬라이드 쇼 의 슬라이드 8에서 adb가 클라이언트, 서버 및 데몬의 세 부분으로 구성되어 있다고 설명합니다 . 클라이언트와 서버는 PC에서 실행됩니다. 데몬은 전화에서 실행됩니다. 슬라이드 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

일반적으로 정상적인 재부팅 모드 (장치 버튼 등 사용)에서는 종료 프로세스와 같이 파티션을 마운트 해제하고 모든 응용 프로그램을 종료하고 모든 열린 노드를 닫으므로 프로세스가 더 길어집니다. 이 adb reboot(가 오는 곳에서) 리눅스 재부팅 명령으로 비교 될 수있다 : 그냥 디스크를 플러시 먼저 살해 프로세스 또는 언 마운트 파일 시스템없이 재부팅을 입력합니다. 또한 재부팅하기 전에 디스크 (시스템의 경우 장치의 스토리지 부분)를 ro 모드로 설정하기 위해 빠른 다시 마운트 명령이 실행되는 것을 볼 수 있습니다.

또한 발행 된 명령 kernel_restart()은 커널에 포함되어 있다고 생각합니다 . 예를 들어 http://www.phonesdevelopers.com/1730094/참조하십시오 . machine_restart통화 도 확인하십시오 .


1
+1. 대단히 감사합니다! adb reboot완전 종료 절차를 수행하지 않더라도 매일 수행하는 것이 안전 합니까?
unforgettableidSupportsMonica

아프지는 않지만 그렇게 할만한 이유가있을 수 있습니다. 실제로 캐시 된 데이터를 지우려면 다른 해결책이 있습니다.
user3344236

...와 같은 다른 솔루션?
JohnyTex

2

다른 Stack Exchange 사용자는 다른 곳의 게시물에서이 질문에 이미 답변했습니다.

t0mm13b 캐리어의 종료 애니메이션을 표시하면서 다음과 같이 씁니다 .

  • Android는 런타임의 중요한 부분을 안전하게 종료합니다.
  • OS는 또한 앱과 서비스가 정상적으로 종료되도록 알리기 위해 방송을하고 있습니다. 이것들은 차례로 모든 데이터와 공유 환경 설정의 캐시를 플러시하고 sqlite 데이터베이스 등에 무엇을 저장합니까?

다시 말해, 앱과 서비스에는 체계적으로 정리할 수있는 기회가 주어집니다.

[와 같은 명령 adb reboot은 더 거칠다. 실제로는 안전하게 종료하여 안전 메커니즘을 우회합니다.

Yury는 정상적으로 종료하는 동안 Android의 기능에 대한 또 다른 설명 을 제공합니다 .

  • ActivityManager를 종료합니다. ActivityManager를 종료하면 모든 활동이 필요한 수명주기를 통과하므로 활동 상태가 저장됩니다. 그러나 나는 확실하지 않다. 나는 확인하지 않았다.
  • 그런 다음 Android는 셀룰러 라디오 인터페이스를 끕니다.
  • 그런 다음 Bluetooth가 꺼집니다.
  • 마지막으로 MountService를 종료하려고 시도합니다.

adb reboot 위의 일부 또는 전부를 건너 뛰기 때문에 더 빠릅니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.