반응형

android 8

Kotlin 싱글톤 사용시 주의 사항

싱글톤은 프로세스가 살아 있는 동안 객체가 살아있고 필요한 정보를 한곳에 모울 수 있어 많이 사용하는 방법입니다. 하지만 안드로이드에서는 이 방법을 사용할 때 주의가 필요합니다. 이유는 안드로이드는 메모리가 부족해지거나 절전 모드에서 필요시 프로세스를 죽이고 사용자가 앱을 다시 전환했을 때 재실행하기 때문입니다. 이 때의 재실행은 앱아이콘을 클릭하여 실행하는 경우와는 틀리게 최상단의 액티비티만이 재생성됩니다. 이런 경우에 프로세스가 재실행되는 관계로 프로세스 재실행시 싱글톤은 재생성되기 때문에 싱글톤의 내용이 초기화됩니다. 싱글톤의 사용에 의존하는 경우 갑자기 초기화된 싱글톤을 사용하게 되면 알수 없는 버그가 앱에서 발생할 수 있습니다. 즉, 앱이 실행되는 동안 필요한 영구적인 정보를 싱글톤에만 저장하고..

Kotlin 테스트를 위하여 앱 프로세서 죽이는 방법

안드로이드는 OS가 메모리가 부족해질 때나 절전 모드상태에서 앱을 죽이는(kill) 경우가 발생할 수 있습니다. 이런 경우는 앱을 처음 실행될 때와는 다르게 앱이 죽기 전에 마지막 실행한 액티비티를 안드로이드는 실행합니다. 여기서 실행한다는 말은 onCreate, 즉 아예 생성부터 다시 한다는 말입니다. 참고로 이 경우 최상단 액티비티 이전의 액티비티들은 재생성되지 않고 다시 생성된 최상단의 액티비티가 finish() 명령을 사용한 경우 처럼 닫혀 이전 액티비티가 최상단 액티비티가 될 때 역시 생성부터 다시 됩니다. 메모리가 부족한 상태에서 앱이 안드로이드 OS에 의하여 죽었을 때 앱 전환시의 스크린샷이 그대로 남아있어 앱 전환 스크린 샷을 클릭하면 앱은 전환됩니다. 이 때 내부적으로 앱은 재시작됩니다...

Unity 최적화: 모바일 파티클 매터리얼

유니티로 만든 게임을 테스트하는데 특정 파티클을 사용하면 개발 PC나 삼성 S7에서는 이상이 없는데 LG V10에서 프레임 드랍이 일어나는 현상이 있었습니다. 프로파일링시 스크립트에서의 실행 시간은 별문제가 없었고 랜더링 시간이 늘어나는 것만을 확인할 수 있었습니다. 처음에는 파티클 사용에 따른 랜더링 부하라고 생각했다가 파티클을 살피던 중 매터리얼에서 사용하는 쉐이더가 스탠다드 인 것을 확인하고 모바일로 수정하였습니다. 그리고 추가적으로 매터리얼에 사용되는 이미지 크기를 표시에 필요한 수준 만큼 줄여주었습니다. 이 두 가지 작업을 하니 랜더링 시간이 줄었고 LG V10에서의 프라임 드랍은 없어졌습니다. 모바일용 게임을 개발할 때 파티클 사용시 파티클이 이용하는 매터리얼 쉐이더에 주의를 하여야 하겠습니다..

Unity 최적화: 안드로이드 LG V10 vs Samsung S7

유니티로 만드는 게임이 크게 복잡하지 않다보니 모바일에서도 60프레임이 가능하도록 만드는 것을 목표로 하고 있습니다. 물론 모바일에서의 게임 프레임은 게임의 쾌적한 실행 이외에도 배터리 사용, 발열 등도 고려해야 하기 때문에 유니티에서는 공식적으로 30프레임을 추천하고 있는 듯 합니다. 하지만 이것은 발매시에 최종 프레임 레이트를 결정하려고 하고 우선적으로는 프로파일링으로 병목을 찾아서 제거하여 속도는 최대로 내려고 합니다. 참고로 유니티에서 최고 프레임 레이트는 Application.targetFrameRate = 60;와 같이 한줄을 추가하면 쉽게 설정할 수 있습니다. 이 예에서는 60프레임으로 설정하였습니다. 만드는 게임이 복잡하지 않는 게임이라 나온지 몇 년된 혹은 저 사양 기기에서도 쾌적한 게임..

Unity 최적화: Update 함수

어떻게 보면 모든 게임 프로그래밍의 기본이 될 수도 있는데 한 프레임내의 연산을 최소화해야 초당 프레임 수가 보장됩니다. 유니티에서는 한 프레임 내에서 실행하는 함수가 Update입니다. Update내에서 코드를 작성할 때 아래와 같은 사항을 조심해야 합니다. 우선 항상 같은 값을 찾는 경우는 멤버 변수에 캐시하여 놓아 한번만 찾고 그 뒤로는 캐시된 값을 이용하도록 만들어야 합니다. 저와 같은 경우 설정 파일을 로딩하여 설정 사항을 가지고 있는 설정 관련 객체를 가지고 있었습니다. 그런데 업데이트시 저장된 설정 값을 가져올 때 항상 설정 관련 객체에서 검색이 일어나서 성능 저하가 있었습니다. 결국 한번 검색한 설정 관련 사항은 멤버 변수에 가지도록 하여 검색을 줄여 성능 향상을 하였습니다. new로 객체..

Unity 안드로이드 개발시 알아두면 좋은 것들

Android 파일 전송(Android File Transfer) 맥 안드로이드 간 USB 연결로 MTP을 이용하여 Finder 즉, GUI로 파일 이동을 가능하게 해주는 유틸입니다. 참고: Android File Transfer 휴대폰 IP정보 얻기 개발은 하다 보면 휴대폰의 외부IP가 아닌 내부IP 정보가 필요할 때가 있습니다. 참고: 안드로이드 스마트폰 IP주소 확인하는 법 유니티 리모트(Unity Remote) 안드로이드에 Unity Remote라는 앱을 인스톨하여야 합니다. 기능은 개발 중인 게임을 에디터 화면 외에 안드로이드 화면에서도 동시에 실행시켜 안드로이드에서의 입력 등이 제대로 동작하는지 확인하실 수 있습니다. 일종의 스트리밍 플레이어로 에디터의 화면을 캡처해서 실행시키는 관계로 화질이..

Unity 안드로이드 빌드 시 화면 멈춤(Freezing) 현상 해결

Unity를 모바일로 빌드하여 실행하게 되면 PC나 맥 개발환경에서 발생하지 않는 여러가지 문제가 생기게 됩니다. 그 중 하나가 저는 테스트 기기인 LG V10에서 만든 게임을 일정 시간 플레이를 하면 난수 적으로 화면 멈춤 현상이 생기는 것이었습니다. 저는 이 현상을 PlayerSettings>ResolutionAndPresentation>Optimized Frame Pacing을 해제해서 해결하였습니다. 저는 유니티 2020.3월 버전을 사용했는데 해당 옵션은 아직 불완전한 듯 보입니다. 참고: Android build project freezes after 5 minutes with playerloop in profiler at 60,000 ms 해당 옵션에 대한 부분에 대한 설명은 아래를 참고 바..

안드로이드 프로그래밍 정복

윈도우즈 API 정복으로 유명한 김상형씨가 저술한 안드로이드용 개발서이다. 이 책을 읽은 이유는 폰개발 방법이 궁금한 것 이상으로 김상형씨가 저술한 책이기 때문이었다. 왜 저자를 이야기하는가 하면 윈도우즈 API 정복을 읽었을 때 이 분의 예제가 너무도 인상깊었기 때문이다. 이 분이 저술한 윈도우즈 API 정복이나 이 책이나 군더더기 없는 예제는 여전히 일품이다. Java는 10년 전에 공부한 것이라 기억이 가물가물하지만 모바일 프로그래밍 공부하는 셈치고 한 번 흩어보았다. 전반적으로 잘짜여진 예제로 인하여 빠르고 쉽게 안드로이드 개발을 공부하기에 좋은 책인 듯 보인다. 남에게 추천해주고 싶은 책이지만 Java를 모른다면 언어를 먼저 공부하고 공부해야하는 책일 듯 보인다. 좀 더 빠르고 쉽게 보려면 디자..

반응형