마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드 BLE scanning 앱 개발

0 추천
초보 개발자입니다. 안드로이드 앱을 개발 중인데 해당 앱의 핵심은 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 에대한 내용입니다. 앱이 왜 자꾸 죽는지를 알아야 디버깅을 할텐데....
휴대폰자체의 메모리 부족현상일 수도 있을거 같은데, 메모리 현황등을 직접 확인할수 있는 방법이 있으면 좋겠네요.
DroidNoob (200 포인트) 님이 2023년 9월 24일 질문

1개의 답변

0 추천
안드로이드에 보시면 profiler가 있습니다. 여기에 CPU, 메모리, 네트워크 등의 상태를 확인할 수가 있습니다. 앱이 죽을 때 메모리 상태를 확인하시고 눈에 띄는 부분이 있는지 체크해 보세요.

추가로, Jetpack에서 bluetooth 라이브러리가 최근에 출시되었는데요. 아직 1.0 이 아니라 프로덕션에 직접 사용하는 건 꺼려지지만, 내부적으로 블루투스를 어떻게 처리하는지 참고는 될 수 있을 것 같습니다.

https://developer.android.com/jetpack/androidx/releases/bluetooth

jetpack은 github에 호스팅을 하니까 소스를 찾아서 참조해 보세요.
spark (227,530 포인트) 님이 2023년 9월 25일 답변
spark님이 2023년 9월 25일 수정
...