본문
160119P(화)
Android New Tech & Memory
이번에 pre-test를 치르면서 취업준비를 하느라 마시멜로 같은 최신 이슈에 무뎌진것을 느꼈다.
그래서 마시멜로를 좀 파헤지면서 좀 더 깊게 이론을 탐구하여 자바와 안드로이드 메모리구조와 VM도 좀 살펴보겠다.
안드로이드 6.0 Marshmallow
1. 런타임 권한 모델
기존에는 설치시 권한을 한꺼번에 확인하는 방법이었으나,
마시멜로는 앱 실행중에 권한이 필요한경우 그때 그때 권한을 요청한다.
2. Doze
디바이스의 배터리 사용량을 위한 기능
디바이스가 사용되지 않는 동안, 소모되는 배터리를 줄인다.
다음과 같은 조건을 모두 만족하면 디바이스가 Doze모드로 진입
1. 충전중이 아님
2. 스크린이 꺼져있음
3. 디바이스가 일정시간 움직임이 없음
Doze 모드에 진입하면 디바이스의 배터리 소모를 줄이고자 다음과 같은 기능을 제한받는다.
1. 네트워크 엑세스가 비활성화된다.
하지만 우선순위가 높은 GCM은 제외
2. 절전모드 해제 잠금이 무시
3. AlramManager 클래스로 일정이 예약된 알람이 비활성화
하지만 setAlarmClock(), setAndAllowWhileIdle()로 설정한 알람은 예외
4. WiFi 스캔 불가
5. SyncAdapter와 JobScheduler의 작업이 지연
3. App Standby
안드로이드 플랫폼이 판단할 때 사용자가 더 이상 사용하지 않는 앱은 유휴 상태 앱으로 지정 될 수 있다.
아래의 조건중 한가지라도 발생하지 않으면 유휴 상태 앱으로 지정된다.
1. 사용자가 명시적으로 앱을 시작
2. 포그라운드 프로세스에서 실행
3. 앱이 알림을 생성하였고, 사용자가 해당 알림을 잠금화면이나 알림 트레이에서 확인
4. 설정에서 사용자가 명시적으로 앱이 전원 최적화 옵션에서 제외되도록 요청
유휴 상태인 앱으로 판정되면 네트워크 액세스가 불가하고 동기화 작업이 중단된다.
단, 충전중일때는 네트워크 액세스가 허용되고, 보류작업이 실행
오랫동안 유휴 상태이면 하루에 한번 정도는 네트워크 액세스가 허용된다.
백그라운드에서만 상호작용 없이 동작한다면 유휴상태 앱으로 지정될 가능성이 크므로 확인이 필요하다.
JVM과 메모리
이 부분에 관련해서는 다음 2개의 사이트가 아주 잘 설명해주고 있다.
http://stophyun.tistory.com/37
http://www.gliderwiki.org/wiki/76
Bitmap과 메모리
안드로이드 3.0 이하에서는 Bitmap이 Dalvik VM에 할당되는 것이 아니라 Native Heap에 별도로 생성되었기 때문에 GC대상이 아니었다. 그래서 일일이 recycle()로 자원을 회수해야만 했다.
안드로이드 3.0 이상부터는 Bitmap도 VM안에서 메모리 할당이 이루어 지므로 GC 대상이다. 따라서 bitmap = null; 만으로도 GC대상으로 만들어버려 메모리 회수가 가능하다.
Bitmap을 불러올 때 캐쉬메모리에 저장해놓고 로딩됐던 이미지는 캐쉬에서 불러오도록 하는것이 OOM을 줄이는데 도움이 된다.
그러나 캐쉬 자체 크키가 커져버리면 여지없이.....공포의 OOM!!!
그래서 개발자가 캐쉬를 커스텀 디자인하거나 구글이 제공하는 LUR캐쉬를 사용하는 방법이 있다.
'Mobile > Android' 카테고리의 다른 글
160321A(월) (0) | 2016.03.21 |
---|---|
160319A(토) (0) | 2016.03.19 |
160302P(수) (0) | 2016.03.03 |
160210P(수) (0) | 2016.02.11 |
160118P(월) (0) | 2016.01.18 |
댓글