← Docs hub

부팅과 대표 기능의 실행 흐름

기준: 1398d109c391c4044cae26d0e9aea4d3f08d9670. 지정 커밋의 추적 파일을 직접 확인한 정적 구조 분석이며, 현재 HEAD·후속 TaskManager·SKIX 구현을 포함하지 않는다.

D/는 apps/DeviceAgent/app/src/main/java/com/sk/airbot/deviceagent/다. 아래 흐름은 지정 커밋의 코드 연결이다. 비동기 서비스의 실제 준비 순서·시간은 부팅 로그를 별도로 확인해야 한다.

부팅과 초기화

부팅과 비동기 준비

  1. DeviceAgent Manifest의 directBootAware BootReceiver는 LOCKED_BOOT_COMPLETED를 받도록 선언되어 있다.
  2. BootReceiver.onReceive()가 DeviceAgent를 startService()한다.
  3. DeviceAgent.onCreate()는 프로토콜 초기화 후 connectServices()를 호출한다. WssService·StreamingService 시작, AMR·Vision·Pairing·IoT·Update 연결이 여기서 요청된다.
  4. 공통 참조·앱 문맥, 이동 객체, device_manager HAL, 설정 migration, 하드웨어 관찰·필터·팬·LCD 초기화가 이어진다.
  5. 암호화 서비스 연결 callback에서 MapManager를 초기화한다. SoundFlow는 별도 연결 재시도 경로를 가진다.
  6. ScheduleInitRunner.run()이 활성 예약 재등록과 재등록 알람·일련번호 기반 알람 설정을 비동기로 수행한다.

근거: Manifest, D/receiver/BootReceiver.java:11, D/DeviceAgent.java:310–433, D/schedule/ScheduleInitRunner.java:27.

StartupService도 별도 앱이다. 전체 Android init→zygote→system_server의 등록 코드는 이 패키지 저장소에 없으므로 이 그림에 제품에서 검증한 시작 순서로 넣지 않았다. 관련 모듈은 앱 구성과 플랫폼을 참조한다.

일반 청정과 이동

단계 처리 근거
요청 PUI·앱이 IDeviceControl에 method·인자를 전달 AIDL, D/DeviceAgent.java:264
상태 입구 재부팅 제한, 검사 모드 라우팅, blocked method 검사 D/main/api/MainApi.java:150
기능 분기 setAirCleanerOperation, setAMROperation, return/pause/resume/stopMovement 같은 파일 :523, :887, :1036 이후
실제 조정 청정 종류와 이동 controller, 정책 및 하드웨어 manager 호출 D/cleaning/, D/moving/, D/policy/CmdPolicyManager.java
하위 실행 이동은 AMRService→AMRAgent; 팬 등은 MCU 프로토콜→device_manager HAL D/device/item/amr/, D/device/item/mcu/
결과 AMR report / HAL callback으로 상태를 반영하고 앱·IoT로 전달 D/main/MainService.java, D/DeviceAgent.java:112, D/app/AppCmd.java

여러 기능을 공통 TaskManager가 모두 감싼 구조는 아니다. API별 조건·정책·callback 처리가 나뉘어 있으므로 실제 기능 추가 시 왕복 경로를 함께 읽어야 한다.

예약 실행

ScheduleManager.setSchedule()는 DAO에 저장하고 AlarmManager의 exact alarm을 설정한다. ScheduleAlarmReceiver는 저장된 예약의 존재·활성 상태, 요일·시각·공휴일, GPS 연동 예외를 확인하고 중복 간격을 검사한다. 이후 별도 실행 허용 조건과 기능 동작으로 진행한다.

근거: D/schedule/ScheduleManager.java:29, :76, D/schedule/ScheduleAlarmReceiver.java:40–122, canExecuteSchedule()와 triggerScheduleAction().

WSS와 Streaming

WSS는 WssService → WssControlStub → WssManager의 전용 경로다. manager 아래에 이동, 얼굴 검증, EventAsset 검증·업로드와 복구 책임이 나뉜다. Streaming은 StreamingService → StreamingControlStub → StreamingManager에서 세션 시작·종료, 녹화 자료, 수동 이동을 조정한다.

ipc/TaskExecutor는 DA_TASK_QUEUE HandlerThread에서 ITask.execute()를 호출한다. finally에서 running ID를 지우므로 해당 Java 작업 반환을 표시할 뿐, 장시간 물리 동작의 완료를 추적하는 범용 Task lifecycle이 아니다. WSS와 Streaming의 명령 ID base가 모두 2000이므로 ID만으로 큐를 조회·삭제할 때 충돌 가능성을 검토해야 한다. 실제 오동작 재현은 하지 않았다.

근거: D/ipc/TaskExecutor.java:17–105, D/ipc/WssControlStub.java, D/ipc/StreamingControlStub.java, D/wss/, D/streaming/.

음성·시각·클라우드

LlmManager는 TTS·언어·음성 상태·privacy·lock 변화 등을 Bundle로 표현해 앱 연계에 사용한다. STT·LLM 엔진 전체가 이 클래스 안에 있는 것은 아니다. SoundFlowManager는 외부 오디오 HAL 연결과 상태 이벤트를 담당하고, VisionAIManager는 VisionAgent와 연결한다.

IoT 요청의 기기 실행과 장치 상태의 클라우드 보고는 IotAgent와 DeviceAgent 사이의 IIotControl callback·명령 경계를 따라간다. MQTT 발행 성공이나 Binder 복귀만으로 사용자가 요청한 동작이 완료됐다고 판정하지 않는다.

근거: D/llm/LlmManager.java, D/system/SoundFlowManager.java, D/recognition/VisionAIManager.java, D/main/MainService.java:500 이후, IotAgent 상세.

Connections

전체 목차 · 앱 구성 · DeviceAgent 내부 · IPC · 실행 흐름 · 플랫폼·빌드 · 근거·확인 범위

Keyboard shortcuts

⌘K / Ctrl+KOpen command palette
/Focus search
g hGo to home
g pGo to projects
g sGo to sessions
j / kNext / prev row (tables)
?Show this help
EscClose dialogs

Structured queries

Mix key:value filters with free text in the palette:

type:sessionOnly session pages
project:llm-wikiFilter by project name (substring)
model:claudeFilter by model name (substring)
date:>2026-03-01Sessions after a date
date:<2026-04-01Sessions before a date
tags:rustPages mentioning a tag/topic
sort:dateSort results by date (newest first)

Example: type:session project:llm-wiki date:>2026-04 sort:date