안드로이드 개념 정리
하이브리드 앱이란?
네이티브 앱처럼 하드웨어의 기능들을 사용할 수 있으며 마켓에 등록이 가능하며 배포 후에도 웹만 연결되어 있다면 수정/보완을 할 수 있습니다. 또한 하나의 소스로 아이폰과 안드로이드에 맞게 포장이 가능하며 핵심 부분은 웹 앱 기술로 빠르게 제작이 가능하여 개발 비용이 적어질 수 있습니다.
실제 핵심기능은 코드로 구현하고 지속적으로 업데이트 할 부분은 웹에서 관리하는 기능입니다.
ex)멜론차트
Looper란
Looper는 스레드간의 신호이므로 handler에 보낸다고 해서 곧바로 처리되는 것이 아닙니다. 동시다발적으로 메세지가 발생할 수 있기 때문에 메세지 큐(Message Queue)에 쌓았다가 처리합니다. 큐(Queue)에 들어있는 내용을 하나하나 꺼내 처리하는 놈이 바로 루퍼입니다. 메인 쓰레드가 looper를 가지고 있으며 무한 루프를 돌며 큐의 내용을 처리합니다.
쓰레드간 통신 방법
-
Java IO에서 제공하는 파이프를 이용한 방법
-
쓰레드간의 공유메모리를 통한 접근 (인스턴스 맴버변수,클래스멤버변수)
-
synchronized를 이용한 시그널링
-
BlockingQueue를 이용한 방법
안드로이드 스레드 통신 메커니즘을 알기 위해서는 android.os 패키지 안의 다음 사항을 알아야 한다.
핸들러 - 루퍼 - 메시지 큐 - 메시지
- android.os.Looper : UI 스레드에 하나가 존재하며 소비자 스레드와 연관된 메시지 발송자 (데이터를 읽는 역활)
(소비자 => 데이터를 읽는다)
- android.os.Handler : 큐에 메시지를 삽입하는 생산자 스레드를 위한 인터페이스와 소비자 스레드 메시지 처리, 하나의 Looper 객체는 많은 핸들러를 갖지만 모두 같은 큐에 삽입
- android.os.MessageQueue : 소비자 스레드에서 처리할 메시지들이 담긴 무제한의 연결 리스트. 모든 루퍼와 스레드는 최대 하나의 메시지 큐를 가진다.
- android.os.Message : 소비자 스레드에서 실행하는 메시지
Intent Flag - FLAG_ACTIVITY_CLEAR_TOP, FLAG_ACTIVITY_SINGLE_TOP에 대해 설명
FLAG_ACTIVITY_SINGLE_TOP => 동일한 액티비티가 연속적으로 호출될경우 1개로 취급
FLAG_ACTIVITY_CLEAR_TOP => 동일한 액티비티가 쌓일경우 rootActivity만 남기고 제거
안드로이드 메모리 관리
안드로이드에서 메모리 관리는 GC를 이용해서 진행되게 됩니다.
주기적으로 GC루트에서 모든 객체 참조에 대해 활성객체를 표시하고 활성되지 않은 객체는 메모리에서 지워집니다.
String References와 WeakReference로 나눌 수 있습니다.
안드로이드의 메모리 구조
안드로이드의 메모리구조를 보면 램, 내장메모리, 외장메모리로 구분됩니다.
렘 : 프로그램이 실행될때 상주되는 공간입니다. 평상시에 하드에 저장되어있다가 런타임시에 차지되는 공간을 말합니다.
내장메모리 : 간단하게 하드디스크라고 생각해도 됩니다.
외장메모리 : 메모리가 더 필요할때 추가 할 수 있는 메모리입니다.
PendingIntent에 대해서 설명해주세요.
Intent를 직접 보내지 않고 다른 클래스에서 Intent를 위임해주기 위한 클래스이다.
보통 NotificationBar와 상호작용 하는 어플리케이션을 작성할때 사용된다.
즉 알림바, 알람, 다른앱에서 startActivity,sendBroadCast,StartService가 실행되게 하고 싶을때 Intent를 PendingIntent에 담아서 호출한다.