티스토리 뷰

개발/ANDROID

Android Context

카렐 2018. 8. 12. 20:47


콘텍스트란 무엇인가?

콘텍스트란맥락, 전후 사정이라는 뜻을 갖고있다.

그리고 Context 어원은

라틴어 ‘contexts, contextere’ 에서 출발했다. 여기서 con-함께(togther)’ 뜻하고 ‘texere’짜다(weave, 옷감등을 엮어서 짜다), 만들다 의미한다. 컨텍스트는 언원적으로함께 관계를 만들다라는 의미를 내포한다.


안드로이드에서 콘텍스트는?

      1. 애플리케이션 환경에 대한 글로벌 정보에 대한 인터페이스
      2. 안드로이드 시스템이 구현하는 추상 클래스
      3. 애플리케이션별 리소스 클래스에 액세스할 있다.
      4. 액티비티를 시작하거나, 브로드캐스팅 인텐트 수신등의 애플리케이션 레벨 작업에 대한 상향 호출 허용

그러니까 Context 있어야 리소스나 클래스에 접근하거나, 안드로이드의 4 컴포넌트등을 시작할 있다.


그런데 Context 통해서 해당 애플리케이션의 정보에 접근해야할까? 그냥 하면안돼?

이것은 안드로이드의 멀티태스킹 디자인 고려사항과 관련이 있다.

모바일 디바이스는 기술적인 한계점을 갖고 있으며 일반적인 데스크탑 혹은 웹환경과는 다른 사용자 경험이 요구된다.

다음은 안드로이드의 멀티태스킹 기능을 설계하는데 중요하게 여긴 네가지 제약 사항이다.

      1. 특정 어플리케이션 사용을 끝마쳤을 , 명시적으로 어플리케이션을 종료하지 않아도 되기를 원했다. 사용자들은 다양한 종류의 어플리케이션을 아주 짧게 그리고 반복적으로 사용하기 때문이다.
      2. 휴대용 장치들은 풍족한 스왑 메모리 공간을 갖고 있지 못하며, 메모리 사용에 빡빡한 제한을 갖고 있다.
      3. 모바일 디바이스에서 어플리케이션 스위칭은 중요하다. 새로운 어플리케이션이 1 이내에 시작될 있도록 해야한다. 비디오를 보다가 새로 도착한 SMS 문자를 확인하고 다시 비디오 플레이 어플리케이션으로 돌아가는 등의 사용자 시나리오를 생각해 본다면, 몇몇 어플리케이션간의 빠른 스위칭은 특히 중요한 문제이다.
      4. 사용할 있는 API 안드로이드에 기본 내장된 구글 어플리케이션을 만들 있을 만큼 충분히 강력해야 한다. 이것은모든 어플리케이션은 동등하다.’ 라는 철학의 문제이다. , 백그라운드 음악 재생, 데이타 동기화, GPS 네비게이션, 어플리케이션 다운로드등의 기능을 서드 파티 어플리케이션 개발자들이 사용가능한 API 동일한 API 이용해서 작성되어야 한다.

위의 4가지중에 1,2번에 주목해야한다. 사용자들이모든 어플리케이션은 항상 실행 것처럼 느끼게 해야한다. 하지만 동시에 모바일 디바이스는 메모리 사용에 빡빡한 제한이 있다. 시스템이 사용 가능한 영역 보다 많은 메모리가 필요한 경우가 되면, 데스크탑 컴퓨터들은 단순히 페이지 스왑을 위해 작동이 조금 느려지게 된다. 반면 모바일 디바이스는 성능상의 문제점이 생기거나 아예 먹통이 되버릴 있다. 제약조건이 안드로이드의 멀티태스킹 메커니즘을 설계하기위한 핵심 동기가 되었다.


위의 멀티태스킹 디자인이 고려되어 안드로이드에서 프로세스와 어플리케이션은 밀접하게 연결(tightly coupled)되어 있는 요소가 아니며, 어플리케이션은 해당 어플리케이션을 작동시키고 있는 프로세스가 없음에도 사용자에게 현재 작동하는 것처럼 보일 수도 있고, 여러 어플리케이션이 프로세스를 공유할 수도 있습니다. 혹은 필요에 따라 하나의 어플리케이션이 여러개의 프로세스를 사용할 수도 있고, 실제로 어플리케이션이 작동 중이 아님에도 어플리케이션을 구동했던 프로세스들은 종료되지 않고 안드로이드 시스템에 의해 유지될 있습니다.


, 프로세스 == 애플리케이션이 아니기 때문에 애플리케이션의 리소스나 클래스에 접근하기 위해서 Context라는 별도의 매개체를 통해 이용가능 것이다.



어플리케이션과 프로세스가 별도로 관리되고 있다면 어플리케이션 정보는 어디서 관리하고 있을까?

안드로이드의 시스템 서비스 하나인 ActivityManagerService 에서 관리한다

ActivityManagerService 특정 토큰을 키값으로 ‘Key-Value’ 쌍으로 이루어진 배열을 이용해 현재 작동중인 어플리케이션 정보를 관리한다.

안드로이드 플랫폼상에서의 관점에서 보면 Context 다음과 같은 두가지 역할을 수행하기 때문에 필요한 존재이다.

    1. 자신이 어떤 어플리케이션을 나타내고 있는지 알려주는 ID 역할
    2. ActivityManagerService 접근할 있도록 하는 통로 역할


Context 종류

    1. Application Context
    2. Activity Context

Application Context

    Application Context 애플리케이션 자체의 생명 주기(라이프사이클) 영향을 받는다. 따라서 항상 애플리케이션의 생명 주기와 함께한다.

Activity Context

    Activity Context Activity 라이프사이클과 함께 작동해 onDestroy() 함께 사라진다. , Activity 대한 환경 정보들이 Context 있고, Context Intent 통해 다른 액티비티를 띄우면 액티비티 스택에 쌓이게 된다.



참조사이트


공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크