-
Notifications
You must be signed in to change notification settings - Fork 70
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Android에서 LifeCycle 변화시에 예상치 못하게 지도가 제대로 보이지 않는 문제 #53
Comments
@MinJun-chl |
예제는 제작중에 있습니다. |
@MinJun-chl 최소 재현 가능 예제 완성 후, 링크와 함께 멘션 부탁드리겠습니다! |
너무 좋은 라이브러리 항상 감사히 쓰고있습니다.. ㅎ 저도 비슷한 문제가 발생했습니다. I/FlutterNaverMap(13849): 네이버맵 reload 4129 -> 다크모드로 테마 변경하여 다시 빌드 호출후 I/FlutterNaverMap(13849): 네이버맵 reload 4129 옆의 숫자는 랜덤으로 찍은 객체 고유번호 입니다. 위 로그후 문제 되는 부분은 윗분이 올려주신 스크린샷이랑 같습니다. 사용 버전 : ^1.0.0-dev8 |
@wnsgh78b @MinJun-chl |
분석한 원인은 다음과 같습니다.
메모리 누수를 막으면서 해결하는 방법을 찾고 있습니다. 조금만 기다려주시기 바랍니다.
|
@wnsgh78b 안녕하세요. 해당 현상을 동일하게 재현하는데 어려움이 있어, 혹시 테마를 어떤식으로 변경하시는지 알 수 있을까요? |
@MinJun-chl 3번으로 말씀주신 이슈는 #56 과 유사해보입니다. |
Visibility를 이용해서 visible : false로 설정하면 해결되긴 합니다만, 이것도 임시인 것 같고, |
hot-restart시에 간헐적으로 해당 현상 발생 |
flutter/flutter#40284 Lines 121 to 134 in ac792da
처럼 해결했었으나, flutter/flutter#40284 (comment) |
lifecycle changed -> 다시 앱으로 복귀 -> hot-restart 시에 해당 현상 재현됨 새로 생성되는 맵 객체가 destroy 된 것은 아님. 무엇이 문제인지 확인 필요. |
현재 확인된 사항은, Android 12, 13 (API 31~33)에서 재현됩니다. |
API 27, 28, 29, 30에서도 동일 현상 확인하였습니다. 일단은, Debug 모드에서 Hot-Restart시에 발생하는 것을 확인하였으나, Release 모드에서는 어떨지 모릅니다. @wnsgh78b @MinJun-chl |
재현 방법을 찾았습니다. 준비사항
재현 단계
분석한 원인 및 대책플러터를 사용할 경우, 안드로이드에서는 앱에서 잠시 나갔다 들어오면, 대부분 아래와 같은 lifeCycle을 탑니다. 출처 (출처의 사진에 설명을 위해 약간의 수정을 가했습니다) 그리고 이런 lifeCycle을 탈때마다, onPause에서는 하지만, 플러터에서 위젯이나 페이지가 dispose 되는 것은 Android lifeCycle과 전혀 관련이 없습니다. (일종의 SingleActivity이기 때문입니다) override fun dispose() {
// some codes...
mapView.onPause() // 정리 작업을 하지 않는 것으로 보여, 수행하지 않아도 괜찮을 것 같음
mapView.onStop()
mapView.onDestroy()
// some codes...
} 그런데, 이슈가 발생하는 조건은
가 실행된 이후에 생각나는 해결 방안으로는 두가지가 있을 것 같습니다.
하지만, 1번으로 해결할 경우, 앞서 설명한 이유로 메모리 누수가 발생하므로, 적용하기에 적절치 않습니다. |
위의 재현단계를 토대로 2번 해결법을 확인한 결과입니다. 기존 실행 메서드 1. 모두 실행하지 않을 경우 (나머지 모든 케이스 실험해보았습니다.) 결과를 토대로 확인했을 때, 이 이슈를 발생시키려면 (내부 소스를 알 수 없기에 정확히 알 수는 없지만) 추측컨대, 앱의 메모리 사용량을 줄이려고 onStop, onSaveInstanceState가 메모리를 정리해주고, onStart를 통해서 메모리를 다시 복구 시켜주는 것 같습니다. 결국, onStart()와 onStop()을 빼고 사용하면 될 것 같습니다. 다음은 라이프사이클에 따른 메서드 실행 관련 메모리 누수 실험 결과입니다.
결과에 따라, onStart, onStop 메서드만 실행하지 않는 해결 방법을 적용하겠습니다. |
dev.9 버전에서 해결될 예정입니다. |
@wnsgh78b @MinJun-chl dev9에서의 수정이 잘못 이루어졌습니다. |
실행 환경 : 갤럭시 노트 10
사용 버전 : ^1.0.0-dev8
재현 조건 :
상호작용이 되지 않는 것으로 보아 이미지가 덮어씌워진 것으로 보이며 해당 로그를 뱉습니다.
이후 Navigator.pop을 통해 A화면으로 나가보면 A화면에 있던 NaverMap은 dispose되어 격자이미지만 내보냅니다. 이 경우, 어떤 경우에도 Navermap이 다시 init되지 않습니다. (+ 해당 현상이 이 스레드에서 다루는 이슈입니다. -note11g)
상기 화면은 imagepicker를 통해 이미지를 등록한 이후의 화면입니다.
The text was updated successfully, but these errors were encountered: