초보 개발자입니다. 안드로이드 앱을 개발 중인데 해당 앱의 핵심은 BLE scanning을 계속해서 진행해야합니다.
그래서 foreground service를 사용했고, 알람 매니저로 1분마다 bleScanning(for 1minute) - bleScanStop 을 실행했습니다. 그러자 앱이 3일, 4일 정도 지나면 어느샌가 죽어있더라고요.
아래는 ActivityManager로 추출한 앱 종료 로그입니다.
I/System.out: isLowMemoryKillReportSupported() -> true
I/System.out: ApplicationExitInfo(timestamp=23/9/24 오후 5:19 pid=18226 realUid=10460 packageUid=10460 definingUid=10460 user=0 process=com.xxxx.xxxx reason=4 (APP CRASH(EXCEPTION)) subreason=0 (UNKNOWN) status=0 importance=400 pss=0.00 rss=0.00 description=crash state=empty trace=null
I/System.out: ApplicationExitInfo(timestamp=23/9/24 오후 5:18 pid=16872 realUid=10460 packageUid=10460 definingUid=10460 user=0 process=com.xxxx.xxxx reason=4 (APP CRASH(EXCEPTION)) subreason=0 (UNKNOWN) status=0 importance=400 pss=0.00 rss=0.00 description=crash state=empty trace=null
I/System.out: ApplicationExitInfo(timestamp=23/9/24 오후 5:17 pid=14209 realUid=10460 packageUid=10460 definingUid=10460 user=0 process=com.xxxx.xxxx reason=2 (SIGNALED) subreason=0 (UNKNOWN) status=9 importance=125 pss=46MB rss=115MB description=null state=empty trace=null
앱 자체의 핵심 적인것은 위에 명시한 bleScanning 을 주기적으로 하는 역할, 그리고 해당 bleScanning중에서
특정 장치 검색시 어떠한 trigger 동작입니다. 그 동작은 매우 간단한 일을 수행하고,
포어그라운드 서비스 앱이기때문에 휴대폰 위에 notification을 고정시켰으며, 앱을 완전히 꺼버리고, 앱 아이콘을 누르거나 notification 클릭시 다시 앱을 열게되면 MainActivity에서 다시 UI를 구성합니다. 그리고 저장된 값 (service class 내 변수, 혹은 sharePreference 내 변수) 를 사용하여, 동작중인 상태도 UI에 업데이트합니다. 물론 앱의 화면을 날려버려서 MainActivity 가 없는데 UI를 참조하진 않습니다.
여기까지가 제가 알고있는 지식 토대로의 앱 전반적인 설명이며, 제가 궁금한것은 앱의 종료 원인
reason=2 (SIGNALED) subreason=0 (UNKNOWN) status=9 에대한 내용입니다. 앱이 왜 자꾸 죽는지를 알아야 디버깅을 할텐데....
휴대폰자체의 메모리 부족현상일 수도 있을거 같은데, 메모리 현황등을 직접 확인할수 있는 방법이 있으면 좋겠네요.