본문 바로가기

ANDROID/Performance

(7)
[Android] Android lifecycle과 savedInstanceState 안드로이드의 시작과 끝은 Activity와 Fragment의 lifecycle이다 할 수 있을 정도로 lifecycle에 대한 중요성은 여러번 말해도 모자르지 않다 싶다. 이전부터 개발자들이 가져왔던 고민들은 앱의 화면방향 전환이 일어나는 경우, 언어가 변경되는 경우, 화면 해상도가 변경되는 경우 등 다양한 변수로 인해 기존의 Activity 혹은 Fragment가 destroy된 이후 다시 재생성되는 케이스를 어떻게 대처할 것인지 일 것이다. 이러한 환경에서 주요 변수를 보존하기 위해 안드로이드는 savedInstanceState를 제공한다. 재생성 및 savedInstanceState에 관해 중요한 내용들을 간단히 정리해 보았다! Activity 및 Fragment Activity가 Backgroun..
[안드로이드] include 태그를 사용하고 있다면? merge 태그로 레이아웃 계층 줄이기 이 포스트는 레이아웃에 관해 다루기 때문에 UI/UX 카테고리에 넣어야 하나도 싶지만, 결론적으로 앱의 성능을 높이기 위한 레이아웃 최적화 작업이기 때문에 Performace 카테고리로 옮기기로 했다. 우선 첫번째로 안드로이드에서 뷰의 계층이 성능이 어떻게 영향을 주는지에 대해서 더 제대로 이해를 해 보고 싶었다. 상기 내용에 대해서 안드로이드 개발자 문서에서는 아래 정도의 내용으로 레이아웃 계층 문제를 설명하고 있다. 모든 뷰는 레이아웃(동사) 및 측정단계를 거쳐 렌더링 된다. 레이아웃 및 측정단계에서 측정 단계는 View 객체의 크기와 경계를 결정하고, 레이아웃 단계는 이 객체를 배치할 위치를 결정. 뷰가 setText 등의 작업에 의해 사이즈를 조절해야 하는 경우 다시 이 레이아웃 및 측정단계를 거..
[안드로이드] 구글이 소개하는 메모리 최적화 기법들을 리뷰해보자 안드로이드 개념 공부를 하던 중에 앱 메모리 관리라는 페이지를 찾게 되었는데, 상당히 유용한 정보들과 어떠한 기술들이 실질적으로 어떤 이점을 가져다주는지 등에 대한 내용들이 있어 포스팅에 좋을 것 같다고 생각했다. 공식 문서가 소개하는 내용들 중 핵심적으로 정리하고자 하는 내용들을 써보고자 한다. 1. onTrimMemory callback의 활용 import android.content.ComponentCallbacks2 // Other import statements ... class MainActivity : AppCompatActivity(), ComponentCallbacks2 { // Other activity code ... /** * Release memory when the UI beco..
[안드로이드] 안드로이드 스튜디오의 Inspect Code로 프로젝트 자가진단하기 최근에 안드로이드 스튜디오를 3.5.0으로 업데이트하면서 Lint라는 도구의 존재를 알게 되었고, 거기에서 나아가 Lint 도구가 포함된 Inspect Code를 안드로이드 스튜디오에서 활용할 수 있음을 알았다. 사용법은 매우 간단한데, 안드로이드 스튜디오 상단 메뉴에서 Analyze로 들어가 Inspect Code를 수행하면 된다. 그렇게 정해진 조건으로 분석을 수행하고 나면 다양한 관점에서 꽤나 상세한 내용을 가지고 에러 및 개선의 여지가 있는 부분들을 보여준다. 팀에서 코드리뷰를 하지 않거나 스스로 프로젝트를 점검해보고 최적화하고 싶은 개발자들이 간편하게 활용할 수 있는 좋은 방법이 아닌가 싶다. 다만 언제나 이런류의 리팩토링을 진행할 때에는 필히 먼저 저장하고, 부분적으로 개선 후 재실행 하는 3..
[안드로이드] 안드로이드 오버드로우 개선 - 레이아웃의 background를 확인하자 앱 개발 단계가 잠시 소강상태에 있는동안 자잘자잘한 부분들까지 개선해서 기본적으로 최대한의 성능을 유지할 수 있도록 점검을 하고 있는 중이다. 그동안 메모리는 상당부분 건드려왔었기 때문에 레이아웃에 관련해서 개선점이 있을까 이전에 책에서 봤던 레이아웃 오버드로를 점검해보기로 했다. 대충 구글에서 말하고 있는 바로는 개발자 옵션에서 오버드로 옵션을 켰을때 붉은 부분이 최대한 나타지 않도록 하는것이 '권장' 하는 바로 되어있는데, 에서는 이 '권장'하는 부분, 오버드로를 제거함으로써 생각보다 상당한 성능개선이 나타난다는 점을 보여주고 있다. 그런고로 오버드로 옵션을 키고 앱을 쭉 실행해봤고, 아니나 다를까 겹치는 부분들이 상당히 있어 처음엔 부분 부분의 background를 @null로 설정해주었지만 큰 개..
[안드로이드] 안드로이드 앱 메모리 최적화 - 이미지뷰 drawable 비우기 안드로이드 앱 최적화를 진행하면서 안드로이드 모니터로 메모리 사용 현황을 체크해봤는데, 생각보다 그래픽 관련 리소스가 메모리에서 비워지지 않고 계속 할당되어 있는 것을 볼 수 있었다. 찾아낸 여러가지 방안으로 첫째 : 우선 통짜 비트맵 객체를 이용할 경우 비트맵.recycle() 을 통해 비트맵 메모리를 놓아줄 수 있다고 한다. 둘째 : 안드로이드 앱에서 사용되는 이미지 뷰들이 참고하는 drawble 소스를 null로 놓아준다. 이미지뷰.setImageDrawable(null); 아래의 세 그래프 캡처는 최적화를 진행하는 중에 메모리의 변화 과정이다. 세 측정동안 측정 시간이 달라 그래프의 굴곡이 달라보이는 것은 측정 시간 탓일 수 있다. 주목할 점은 위와 같은 코드들을 앱에 적용하면서 실제 메모리 사용..
[안드로이드] 메모리 누수 감지를 위한 LeakCanary 앱에 적용하기 아직도 메모리 누수 문제를 해결하지 못해 여러 방법으로 어디서 누수가 생기는지, 어떤 변수를 손봐야 하는지 감이 잘 오지 않아서 책을 참고하는 중에 LeakCanary라는 무료 라이브러리를 알게 됐다. 중요한건 쓰여진 모든 적용방법을 쓰고도 실행이 되지않아 어떻게 사용할지 잘 몰랐는데 유투브 영상까지 참조하면서 매니페스트 파일까지 건드려야 한다는 걸 알았다. Getting startedIn your build.gradle:dependencies { debugImplementation 'com.squareup.leakcanary:leakcanary-android:1.5.4' releaseImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1...