평소에 안드로이드 휴대폰에 APK 빌드를 올려서 테스트하는데요.
석 달 쯤 전부터 앱 실행 후 특정되지 않는 상황에서 자꾸 앱이 급격히 느려지다가 멈춰버리는 현상이 지속적으로 발생했습니다.
무한루프에 빠질때처럼 순식간에 멈추는 건 아니어서, 급격히 느려지는 시점에서 이것 저것 확인해봤는데요.
- Scene 전환(Unload / Load) 해도 느려지고 멈춤
- SRDebugger 화면에서 메모리와 리소스를 해제해도 느려지다가 멈춤
- 게임 실행 후 아예 그냥 두어도 느려지다가 멈춤
- 아이폰, 아이패드 빌드는 정상 동작
뭔가 특별한 동작을 하다가 멈추는 것도 아니고, 타이밍도 특정되지 않어서 해결할 엄두가 나질 않았습니다.
자칫 잘못하다가는 지금까지 개발해 온 소스를 다 조각내면서 확인해야 하는 상황이 닥칠 것 같아서요...
지난주 주말에 큰 마음 먹고 UniRX 코드부터 떼어내면서 테스트를 시작했는데요.
결과적으로 이번에도 구글링 덕분에 해결할 수 있었습니다.
[현상]
안드로이드 빌드 - 앱 실행 후 특정되지 않는 상황과 시간에서 랜덤하게 앱이 freeze 됨
[문제 해결 과정]
- UniRX 코드에 OnComplete 디버그 코드를 넣어 Dispose가 제대로 실행되고 해제되는지 확인 - 정상 코드 확인
- 재귀 함수(Recursive) 구조로 의심되는 코드들 살펴보고 있으면 정리함 - 특이 사항 없음
- 유니티 프로파일러 스터디, 안드로이드 프로파일링 화면 확인 - freeze 상황에서 WaitForTargetFPS 가 CPU 95% 이상을 먹으면서 freeze 현상 발생함을 확인
- 아이폰, 아이패드 빌드 - 정상 동작
- 안드로이드 다른 휴대폰 빌드 - V30 휴대폰을 맥에 연결하다가 실패 (MTP 설정 메뉴를 못찾아서 ㅠㅠ)
- Build Setting 창에서 Scene 목록을 전부 삭제하고 하나씩 추가해 봄
총 9개의 Scene 중에서 5개정도까지만 로드하고 빌드하면 잘 안죽음 - 아예 안죽는건 아님 ㅠㅠ
Scene 6~7개를 넘어가면 자주 죽음
- Scene 설정 혹은 몇몇 Scene에 잘못 구현된 내용이 있는지 의심하고 이쪽으로 구글링 시작
Unity Android freeze scene 검색어로 구글링
- 구글 상위 링크중에서 아래 링크를 확인
https://forum.unity.com/threads/android-build-project-freezes-after-5-minutes-with-playerloop-in-profiler-at-60-000-ms.863143/
- Project Setting 창에서 Player > Android (Settings for Android) > Resolution and Presentation
Optimized Frame Pacing 을 [v] -> [ ] 체크 해제
- (문제 해결) 안드로이드 APK 빌드 - 앱 실행 후 freeze 현상 발생하지 않음
[알게 된 내용]
- Unity 2019.2 버전부터 Android 에서 제공하는 - Optimized Frame Pacing(최적화된 프레임 속도) 기능이 추가됨. 프로젝트 디폴트로 [v] 됨
https://developer.android.com/games/sdk/frame-pacing?hl=ko
- 유니티 프로파일러를 배우고 사용해봄. 이제는 안드로이드 앱 실행시 유니티 프로파일러로 모니터링 할 수 있게 됨
금, 토, 월 약 3일에 걸쳐 보이지 않는 적과 사투를 벌였는데요.
그래도 다행히 3일만에 해결했다고 생각합니다. 최악의 경우 2주 정도까지 각오하고 있었어서요.
이렇게 또 한 고비를 넘어갑니다. :D
정리 해 주신 건 제가 좀 긁어 갈 수 있을 까요??
어디 올리거나 그런 게 아니라 제가 개인적으로 참고할 내용으로 정리해 두고 싶어서요.