Android에서 '컨텍스트'란 무엇입니까?


답변:


1506

간단히 말하면 :

이름에서 알 수 있듯이 응용 프로그램 / 오브젝트의 현재 상태 컨텍스트입니다. 새로 생성 된 개체가 진행중인 작업을 이해할 수 있습니다. 일반적으로 프로그램의 다른 부분 (활동 및 패키지 / 응용 프로그램)에 관한 정보를 얻기 위해 호출합니다.

당신은 호출하여 컨텍스트를 얻을 수 있습니다 getApplicationContext(), getContext(), getBaseContext()또는 this(시에서 확장하는 클래스에서 Context, 같은 응용 프로그램, 활동, 서비스 및 IntentService 클래스로).

일반적인 컨텍스트 사용 :

  • 새로운 객체 생성 : 새로운 뷰, 어댑터, 리스너 생성 :

    TextView tv = new TextView(getContext());
    ListAdapter adapter = new SimpleCursorAdapter(getApplicationContext(), ...);
  • 표준 공통 리소스 액세스 : LAYOUT_INFLATER_SERVICE, SharedPreferences와 같은 서비스 :

    context.getSystemService(LAYOUT_INFLATER_SERVICE)
    getApplicationContext().getSharedPreferences(*name*, *mode*);
  • 묵시적으로 구성 요소에 액세스 : 콘텐츠 공급자, 방송, 의도

    getApplicationContext().getContentResolver().query(uri, ...);

51
귀하의 예 context.getSystemService(LAYOUT_INFLATER_SERVICE)에서 어디에 어떻게 context정의되어 있습니까?
Dennis

8
텍스트 뷰를 동적으로 생성하면서 컨텍스트가 필요한 이유에 대해 잘 설명되어 있습니다. 그러나 동적으로 텍스트 뷰 배열을 만드는 동안 컨텍스트를 언급 할 필요는 없습니다. 왜 이렇게이다 ? TextView [] textview = 새로운 TextView [10];
Abhinav Arora

38
@AbhinavArora는 배열을 정의 할 때 실제로 텍스트보기의 인스턴스를 구성하지 않습니다 (기본적으로 그냥 들어갈 공간을 만드는 것입니다). 해당 배열에 값을 넣으려면 미리 작성된 TextView가 필요하거나 값을 만들려면 Context가 필요합니다.
mc1arke

24
뷰에 컨텍스트가 필요한 이유는 무엇입니까? 예를 들어, TextView에 컨텍스트가 없으면 무엇을 할 수 없습니까?
공룡

15
"컨텍스트"가없는 코드는 JVM이있는 각 운영 체제에서 실행될 수 있습니다. 그러나 컨텍스트가있는 경우 Android에서 실행해야합니다 .Android 관련 항목을 사용하려면 (장치 위치 액세스, 사진 촬영, 백그라운드 서비스 실행 등) 컨텍스트를 사용해야합니다. http 요청. 컨텍스트는 Java와 Android 사이의 브릿지로 간주 될 수 있습니다.
Faruk Toptas 2016 년

507

맥락의 정의

  • 컨텍스트는 환경 데이터를 나타냅니다.
  • 데이터베이스와 같은 것들에 대한 액세스를 제공합니다

더 간단한 용어 (예 1)

  • Person-X는 스타트 업 소프트웨어 회사의 CEO입니다.

  • 회사에는 수석 아키텍트가 있으며이 수석 아키텍트는 데이터베이스, UI 등과 같은 회사의 모든 작업을 수행합니다.

  • 이제 CEO는 새로운 개발자를 고용합니다.

  • 데이터베이스 또는 UI 등에서 작업 할 것인지 여부는 새로운 사람의 기술을 기반으로 새로 고용 된 사람의 책임을 말하는 건축가입니다.

더 간단한 용어 (예 2)

  • 앱의 리소스에 대한 안드로이드 활동의 액세스와 같습니다.

  • 호텔을 방문 할 때와 비슷하며 적절한 타이밍에 아침, 점심 및 저녁 식사를 원하십니까?

  • 머무는 동안 좋아하는 다른 것들이 많이 있습니다. 이런 것들을 어떻게 얻습니까?

  • 룸 서비스 직원에게 이러한 물건을 가져 오도록 요청하십시오.

  • 여기 룸 서비스 담당자는 귀하가 단일 활동이고 호텔이 앱이 될 것을 고려하는 맥락입니다. 결국 아침, 점심 및 저녁 식사는 자원이어야합니다.


맥락과 관련된 것들은 다음과 같습니다.

  1. 리소스로드
  2. 새로운 활동을 시작합니다.
  3. 뷰 생성
  4. 시스템 서비스 확보

컨텍스트는 Activity , Service , Application 등 의 기본 클래스입니다.

이것을 설명하는 또 다른 방법 : 텔레비전에서 TV 및 채널의 원격으로 컨텍스트를 고려하십시오. 인 텐트 등을 사용하는 리소스, 서비스,---여기서 원격은 모든 다른 리소스에 대한 액세스를 포 그라운드로 가져 오는 액세스 역할을합니다.

  • 따라서 Remote는 인 텐트 등을 사용하여 리소스, 서비스 등의 채널에 액세스 할 수 있습니다.

  • 마찬가지로 ... 원격에 액세스 할 수있는 사람은 자원, 서비스, 의도 등을 사용하여 모든 것에 액세스 할 수 있습니다


상황을 파악할 수있는 다양한 방법

  • getApplicationContext()
  • getContext()
  • getBaseContext()
  • 또는 this(활동 수업에서)

예:

TextView tv = new TextView(this);

키워드 this는 현재 활동의 컨텍스트를 나타냅니다.


3
좋아, 그래서 활동에서 파생 된 클래스는 컨텍스트 자체입니다. 그렇기 때문에 이것을 새로 만든 뷰에 전달하여 컨텍스트를 전달합니다.
0leg

7
다양한 장소에서 컨텍스트에 액세스 할 수있는 것이 좋은 디자인 결정인지 궁금합니다. 응용 프로그램에서 하나의 정적 getContext ()가 충분하다고 생각합니다.
Trilarion

@Trilarion ... 그것은 당신이 컨텍스트를 사용하는 방법에 따라 달라집니다 getApplicationContext(), getContext(), getBaseContext().....이 참조 -> ( stackoverflow.com/a/10641257 )
Devrath

textview를 작성하여 마지막 조각을 확장하려면 다음과 같이하십시오 SomeActivityName.this. 경우에 따라 호출해야 할 수도 있습니다 . 실의 실에서 실은 실이 아니라 실을 this말한다
Zoe

1
컨텍스트 객체는 APK 또는 Android OS에 고유합니까? 응용 프로그램에 두 가지 다른 컨텍스트가있을 수 있습니까?
valijon

366

출처


Android의 Context 주제는 많은 사람들에게 혼란스러워합니다. 사람들은 Android에서 기본 작업을 수행하기 위해 컨텍스트가 자주 필요하다는 것을 알고 있습니다. 사람들은 문맥이 필요한 일부 작업을 수행하려고 시도하고 올바른 문맥을 얻는 방법을 모릅니다. Android의 Context라는 아이디어를 이해하려고 노력할 것입니다. 이 문제에 대한 전체적인 처리는이 게시물의 범위를 벗어나지 만 컨텍스트의 정의와 사용 방법을 이해할 수 있도록 일반적인 개요를 제공하려고합니다. 컨텍스트가 무엇인지 이해하려면 소스 코드를 살펴 보겠습니다.

https://github.com/android/platform_frameworks_base/blob/master/core/java/android/content/Context.java

문맥이란 정확히 무엇입니까?

문서 자체는 다소 간단한 설명을 제공합니다. Context 클래스는 "응용 프로그램 환경에 대한 전역 정보에 대한 인터페이스"입니다.

Context 클래스 자체는 추상 클래스로 선언되며,이 클래스의 구현은 Android OS에서 제공됩니다. 이 문서는 또한 Context는“… 어플리케이션 특정 리소스 및 클래스에 대한 액세스는 물론 액티비티 시작, 방송 및 수신 의도 등과 같은 애플리케이션 레벨 작업에 대한 상향 호출을 허용합니다.

이름이 문맥 인 이유를 매우 잘 이해할 수 있습니다. 그것은 단지 그 때문입니다. 컨텍스트는 활동, 서비스 또는 기타 구성 요소에 대한 링크 또는 후크를 제공하여이를 시스템에 링크하여 글로벌 애플리케이션 환경에 액세스 할 수 있도록합니다. 다시 말해, 문맥은“일반적으로 앱과 관련하여 대체 어디 있는가와 나머지 앱과 어떻게 통신 / 통신합니까?”라는 구성 요소 질문에 대한 답변을 제공합니다. 이 모든 것이 약간 혼란스러워 보인다면, Context 클래스에 의해 노출 된 메소드를 간단히 살펴보면 그 본질에 대한 추가 힌트를 얻을 수 있습니다.

이러한 방법의 무작위 샘플링은 다음과 같습니다.

  1. getAssets()
  2. getResources()
  3. getPackageManager()
  4. getString()
  5. getSharedPrefsFile()

이 모든 방법의 공통점은 무엇입니까? 이들은 모두 컨텍스트에 대한 액세스 권한이있는 모든 사람이 애플리케이션 전체 자원에 액세스 할 수 있도록합니다.

즉, 컨텍스트는이를 참조하는 구성 요소를 나머지 응용 프로그램 환경에 연결합니다. 예를 들어 활동, 서비스 또는 해당 자원에 액세스하는 방법을 알고있는 경우 자산 (예 : 프로젝트의 '/ assets'폴더 생각)은 응용 프로그램에서 사용할 수 있습니다. 동일은 간다 getResources()하는 등의 작업을 수행 할 수 있습니다 getResources().getColor()로 당신을 후크되는 colors.xml리소스 (aapt에 별도의 문제입니다 자바 코드를 통해 리소스에 액세스 할 수 있도록 신경 끄시 고 있음).

결론적으로 즉 Context시스템 리소스에 대한 액세스를 가능하게하고 무엇을 "큰 응용 프로그램"의 서브 클래스에서. 살펴 보자로 구성 요소를 사귀는 것입니다 Context, 추상의 구현을 제공하는 클래스 Context클래스를. 가장 눈에 띄는 클래스가 있습니다 Activity클래스입니다. Activity상속 에서 ContextThemeWrapper어떤에서 상속 ContextWrapper에서 어떤 상속 Context그 클래스가 깊은 수준에서 사물을 이해하는보기 위하여 유용하지만, 지금은 그것을 알고 충분한입니다 자체. ContextThemeWrapper그리고 ContextWrapper꽤 많은 사람들이 같은 소리 것입니다. 그들은의 추상적 인 요소를 구현 Context컨텍스트 (실제 컨텍스트)를 "래핑"하고 해당 함수를 해당 컨텍스트에 위임하여 클래스 자체를 설명합니다.ContextWrapper클래스에서 클래스의 추상 메소드 getAssetsContext다음과 같이 구현됩니다.

@Override
    public AssetManager getAssets() {
        return mBase.getAssets();
    }

mBase생성자에 의해 특정 컨텍스트로 설정된 필드입니다. 따라서 컨텍스트가 랩핑되고 ContextWrappergetAssets 메소드의 구현이 해당 컨텍스트에 위임됩니다. 이 Activity클래스가 Context어떻게 작동하는지 궁극적으로 상속받은 클래스를 다시 살펴 봅시다 .

아마도 활동이 무엇인지 알지만 검토해야 할 것은 기본적으로 사용자가 할 수있는 한 가지 일입니다. 사용자가 상호 작용하는 UI를 배치 할 수있는 창을 제공합니다. 다른 API 및 개발자가 아닌 개발자에게 친숙한 개발자는이 용어를 "스크린"이라고 생각할 수 있습니다. 기술적으로 부정확하지만 우리의 목적에는 중요하지 않습니다. 그럼 어떻게 할 ActivityContext상호 작용과 상속 관계에서 정확히 무엇을하려고?

다시 한 번 구체적인 예를 살펴보면 도움이됩니다. 우리는 모두 활동을 시작하는 방법을 알고 있습니다. 활동을 시작하는 "컨텍스트"가 startActivity(intent)있는 경우 Intent는 활동을 시작하는 컨텍스트와 시작하려는 활동을 설명합니다. 이것은 친숙 startActivity(this, SomeOtherActivity.class)합니다.

그리고 무엇 this입니까? 클래스가에서 상속 받았 this으므로 활동 Activity입니다 Context. 전체 특종은 다음과 같습니다. 호출 startActivity하면 궁극적으로 Activity클래스는 다음과 같은 것을 실행합니다.

Instrumentation.ActivityResult ar =
                mInstrumentation.execStartActivity(
                    this, mMainThread.getApplicationThread(), mToken, this,
                    intent, requestCode);

그래서 그것은을 활용 execStartActivity로부터 Instrumentation(실제로에서 내부 클래스에서 클래스 Instrumentation라고합니다 ActivityResult).

이 시점에서 우리는 시스템 내부를 들여다보기 시작했습니다.

OS가 실제로 모든 것을 처리하는 곳입니다. 그렇다면 계측은 어떻게 정확하게 활동을 시작합니까? 글쎄, 위 thisexecStartActivity방법 의 매개 변수 는 귀하의 활동, 즉 컨텍스트 이며이 컨텍스트 execStartActivity를 사용합니다.

30,000 개 개요는 다음과 같습니다. 인스 트루먼 테이션 클래스는 작업을 수행하기 위해 모니터링중인 활동 목록을 추적합니다. 이 목록은 모든 활동을 조정하고 활동 흐름 관리에서 모든 것이 원활하게 실행되도록하는 데 사용됩니다.

어떤 좌표 스레드 및 프로세스 문제를 완전히 조사하지 않은 일부 작업이 있습니다. 궁극적으로 ActivityResult는 기본 오퍼레이션 ActivityManagerNative.getDefault().startActivity()을 사용합니다. Context이 오퍼레이션 은 호출 할 때 전달한 오퍼레이션 을 사용합니다 startActivity. 전달한 컨텍스트는 필요한 경우 "의도 해결"을 지원하는 데 사용됩니다. 의도 해결은 의도가 제공되지 않은 경우 시스템이 의도의 목표를 결정할 수있는 프로세스입니다. (자세한 내용은 여기 가이드를 확인하십시오).

그리고 Android가이를 수행하려면에서 제공 한 정보에 액세스해야합니다 Context. 특히, 시스템 ContentResolver은 "인 텐트 데이터의 MIME 유형을 결정할 수 있도록" 액세스 할 수 있어야합니다.이 startActivity문맥을 사용 하는 방법 이 약간 복잡하고 내부 내용을 완전히 이해하지 못하는 방법에 대한 모든 내용 입니다. 앱에 필수적인 많은 작업을 수행하기 위해 응용 프로그램 전체의 리소스에 액세스하는 방법을 설명하기위한 Context것이 었습니다. 이러한 리소스에 대한 액세스를 제공하는 것입니다.보다 간단한 예는 Views 일 수 있습니다. 확장 RelativeLayout또는 다른 View클래스를 사용 하여 사용자 정의보기 를 사용하려면Context논쟁으로. 사용자 정의보기를 인스턴스화하면 컨텍스트를 전달합니다. 왜? View는 테마, 리소스 및 기타 View 구성 세부 정보에 액세스 할 수 있어야합니다. 보기 구성은 실제로 좋은 예입니다. 각 컨텍스트에는 Context디스플레이 자체의 크기 나 밀도와 같은 것들에 대해 OS 자체에서 설정하는 다양한 매개 변수 ( 구현 필드 )가 있습니다. 뷰 등을 설정하는 데이 정보가 중요한 이유를 쉽게 확인할 수 있습니다.

마지막 한 단어 : 어떤 이유로 안드로이드를 처음 접하는 사람들 (그리고 심지어 새로운 사람도 아닌 사람들)은 안드로이드에 관해서 객체 지향 프로그래밍을 완전히 잊어 버린 것 같습니다. 어떤 이유로 사람들은 미리 개발 된 패러다임이나 학습 된 행동으로 안드로이드 개발을 구부립니다.

Android에는 자체 패러다임과 사전 패턴을 버리고 문서 및 개발자 가이드를 읽으면 실제로 일관된 특정 패턴이 있습니다. 그러나 나의 진정한 요점은 "적절한 맥락을 얻는다"는 까다로울 수 있지만 사람들은 상황이 필요하고 상황이 없다고 생각하는 상황에 처하기 때문에 정당하지 않게 당황 할 수 있습니다. 다시 한번, Java는 상속 디자인을 가진 객체 지향 언어입니다.

활동 자체는 컨텍스트에서 상속되므로 활동 내부의 컨텍스트 만 "가지고"있습니다. 그것에 마법이 없습니다 (OS가 자체적으로 다양한 매개 변수를 설정하고 컨텍스트를 올바르게 "구성"하기 위해 수행하는 모든 작업 제외). 따라서 메모리 / 성능 문제를 제쳐두고 (예 : 메모리에 부정적인 영향을 미치는 방식으로 필요하지 않거나 컨텍스트에 대한 참조를 보유하는 등) 컨텍스트는 다른 객체와 유사하며 전달 될 수 있습니다 POJO (Plain Old Java Object)와 마찬가지로. 때로는 컨텍스트를 검색하기 위해 영리한 작업을 수행해야 할 수도 있지만 Object 이외의 다른 것으로부터 확장되는 일반 Java 클래스는 컨텍스트에 액세스 할 수있는 방식으로 작성할 수 있습니다. 컨텍스트를 취하는 공개 메소드를 공개 한 다음 필요에 따라 해당 클래스에서 사용하십시오.


33
이것은 훌륭한 답변입니다. 모든 사람이 직관적으로 알고있는 것만 말하는 허용되는 것보다 훨씬 낫습니다.
혼자 칼 푸스

5
이것은 당신이 찾고있는 긴 답변입니다! 잘 설명 된
Nick Jian

4
훌륭한 ans! 진심으로!
zeekhuge 2012 년

3
흠, 나에게 그것은 우리가 옛날 변수가 전역 변수를 호출하는 데 사용했던 것과 같은 소리를냅니다. 물체 방향이 장면에 들어 왔을 때 크게
찌그러졌습니다.

그래서 getApplicationContext에서 얻는 컨텍스트는 Activity의 getContext와 동일합니까?
JPM

119

컨텍스트는 시스템에 대한 핸들입니다. 리소스 확인, 데이터베이스 및 기본 설정에 대한 액세스 권한 얻기와 같은 서비스를 제공합니다. Android 앱에는 활동이 있습니다. 컨텍스트는 애플리케이션이 현재 실행중인 환경에 대한 핸들과 같습니다. 활동 오브젝트는 Context 오브젝트를 상속합니다.

자세한 정보 는 Android Studio를 사용한 Android 개발 소개-학습서를 참조하십시오 .


88

Context응용 프로그램 환경에 대한 전역 정보에 대한 "인터페이스"입니다. 실제로, Context실제로 추상 클래스 구현이 안드로이드 시스템에 의해 제공됩니다.

응용 프로그램 별 리소스 및 클래스에 대한 액세스는 물론 활동 시작, 방송 및 수신 의도 등과 같은 응용 프로그램 수준 작업을위한 업 콜에 액세스 할 수 있습니다.

다음 그림 Context에서이 계층의 루트 클래스 인 클래스 계층을 볼 수 있습니다 . 특히 Activity의 자손 임을 강조 할 가치가 Context있습니다.

활동 다이어그램


이 사진은 어떻게 생성 되었습니까?
d0ye

70

Context정확히 무엇입니까 ?

Android 참조 문서에 따르면 다양한 환경 데이터를 나타내는 엔티티입니다. 로컬 파일, 데이터베이스, 환경과 관련된 클래스 로더, 서비스 (시스템 레벨 서비스 포함) 등에 액세스 할 수 있습니다. 이 책과 Android를 통한 일상적인 코딩에서 컨텍스트가 자주 전달되는 것을 볼 수 있습니다.

" 실제로 안드로이드 "책에서 p. 60.

여러 Android API에는 Contextas 매개 변수가 필요합니다

다양한 Android API를 살펴보면 많은 API가 android.content.Context객체를 매개 변수로 사용 한다는 것을 알 수 있습니다 . 또한 활동 또는 서비스가 일반적으로로 사용됨을 알 수 Context있습니다. 이 두 클래스 모두에서 확장되기 때문에 작동합니다 Context.


52

context안드로이드 에서 이해하는 간단한 예 :

모든 보스에는 덜 중요하고 시간 소모적 인 작업을 수행하기 위해 돌보는 조수가 있습니다. 파일이나 커피 한 잔이 필요한 경우 조수가 달려 있습니다. 일부 상사는 사무실에서 무슨 일이 일어나고 있는지 거의 알지 못하므로 조수에게 이것에 대해서도 물어보십시오. 그들은 스스로 일을하지만 대부분의 다른 일에는 조수의 도움이 필요합니다.

이 시나리오에서는

보스 – 안드로이드 응용 프로그램입니다

조수 – 문맥

커피 파일 / 컵 – 자원

우리는 일반적으로 활동, 응용 프로그램 등과 같은 응용 프로그램의 다른 부분에 대한 정보를 얻어야 할 때 컨텍스트를 호출합니다.

컨텍스트가 관련된 일부 작업 (보조가 필요한 것) :

  • 공통 자원로드
  • 동적 뷰 생성
  • 토스트 메시지 표시
  • 런칭 활동 등

맥락을 얻는 다른 방법들 :

getContext()

getBaseContext()

getApplicationContext()

this

47

Android 컨텍스트 는 애플리케이션 특정 자원 및 클래스 및 애플리케이션 환경에 대한 정보에 액세스 할 수 있는 인터페이스 (일반적으로 Java 의미가 아니라 Java에서는 Context실제로 추상 클래스입니다!)입니다.

Android 앱이 웹 앱인 경우 컨텍스트는 다음과 유사합니다. ServletContext (여기서는 정확하게 비교하지 않습니다).

활동 및 서비스도 확장 Context되므로 앱이 실행중인 환경 정보에 액세스하기 위해 모든 메소드를 상속합니다.


35
  • Context 환경 데이터를 얻는 핸들을 나타냅니다.
  • Context 클래스 자체는 abstract로 선언되며, 그 구현은 안드로이드 OS에서 제공됩니다.
  • Context 텔레비전에서 TV 및 채널의 원격과 같습니다. 리소스, 서비스 등 여기에 이미지 설명을 입력하십시오

당신은 그것으로 무엇을 할 수 있습니까?

  • 리소스로드 중
  • 새로운 활동을 시작합니다.
  • 뷰 생성
  • 시스템 서비스 받기

문맥을 얻는 방법 :

  • getApplicationContext()
  • getContext()
  • getBaseContext()여기에 이미지 설명을 입력하십시오여기에 이미지 설명을 입력하십시오

18

초보자를위한 것입니다.

먼저 단어 문맥을 이해하십시오.

영어 -lib. 그 뜻은:

"사건, 진술 또는 아이디어의 배경을 형성하고 완전히 이해하고 평가할 수있는 상황."

"단어 나 구절 바로 앞에 와서 따르고 그 의미를 명확하게하는 글이나 말의 일부."

이제 프로그래밍 세계에 대해 동일한 이해를하십시오.

어플리케이션 / 오브젝트의 현재 상태 컨텍스트. 새로 생성 된 개체가 진행중인 작업을 이해할 수 있습니다. 일반적으로 프로그램의 다른 부분 (활동, 패키지 / 응용 프로그램)에 관한 정보를 얻기 위해 호출합니다.

당신은 호출하여 컨텍스트를 얻을 수 있습니다 getApplicationContext(), getContext(), getBaseContext()또는 this(시 활동 클래스).

응용 프로그램의 Context Anywhere를 가져 오려면 다음 코드를 사용하십시오.

AppContext당신의 안드로이드 응용 프로그램 내에서 새로운 클래스를 만듭니다

public class AppContext extends Application {

    private static Context context;

    public void onCreate(){
        super.onCreate();
        AppContext.context = getApplicationContext();
    }

    public static Context getAppContext() {
        return AppContext.context;
    }
}

이제 비 활동 클래스에서 애플리케이션 컨텍스트를 원할 때마다이 메소드를 호출하면 애플리케이션 컨텍스트가 있습니다.

이 도움이되기를 바랍니다.)


17

이를 앱 또는 서비스가 실행중인 프로세스를 격리 한 VM이라고 생각하십시오. 격리 된 환경은 여러 가지 기본 시스템 정보 및 허용되는 특정 리소스에 액세스 할 수 있습니다. 해당 서비스를 이용하려면 해당 컨텍스트가 필요합니다.


17

컨텍스트는 현재 객체에 대한 참조입니다. 또한 컨텍스트를 통해 응용 프로그램 환경에 대한 정보에 액세스 할 수 있습니다.


13

클래스 android.content.Context 는 Android 시스템 및 프로젝트 리소스에 대한 연결을 제공합니다. 응용 프로그램 환경에 대한 전역 정보에 대한 인터페이스입니다.

컨텍스트는 또한 위치 서비스와 같은 Android 서비스에 대한 액세스를 제공합니다.

활동 및 서비스는 Context수업을 확장합니다 .


9

컨텍스트는 android.content.Context 클래스의 인스턴스로, 애플리케이션을 실행하는 Android 시스템에 대한 연결을 제공합니다. 예를 들어, 컨텍스트를 통해 현재 장치 디스플레이의 크기를 확인할 수 있습니다.

또한 프로젝트 리소스에 액세스 할 수 있습니다. 응용 프로그램 환경에 대한 전역 정보에 대한 인터페이스입니다.

Context 클래스는 또한 시간 기반 이벤트를 트리거하는 알람 관리자와 같은 Android 서비스에 대한 액세스를 제공합니다.

활동 및 서비스는 컨텍스트 클래스를 확장합니다. 따라서 컨텍스트에 직접 액세스하는 데 사용할 수 있습니다.


9

컨텍스트 는 애플리케이션 환경에 대한 글로벌 정보에 대한 인터페이스입니다. 시스템에서 구현을 제공하는 추상 클래스입니다 Android.

Context 응용 프로그램 별 리소스 및 클래스에 액세스하고 다음과 같은 응용 프로그램 수준 작업을 호출 할 수 있습니다. launching activities, broadcasting and receiving intents, etc.

여기 예입니다

 public class MyActivity extends Activity {

      public void Testing() {

      Context actContext = this; /*returns the Activity Context since   Activity extends Context.*/

      Context appContext = getApplicationContext();    /*returns the context of the single, global Application object of the current process. */

      Button BtnShowAct1 = (Button) findViewById(R.id.btnGoToAct1);
      Context BtnContext = BtnShowAct1.getContext();   /*returns the context of the View. */

자세한 내용은 http://developer.android.com/reference/android/content/Context.html 을 방문 하십시오.


8

컨텍스트는 기본적으로 리소스 액세스 및 응용 프로그램 (응용 프로그램 컨텍스트) 또는 활동 (활동 컨텍스트) 또는 기타 환경 세부 정보를 얻는 데 사용됩니다.

메모리 누수를 피하려면 컨텍스트 개체가 필요한 모든 구성 요소에 응용 프로그램 컨텍스트를 사용해야합니다. 자세한 내용은 여기를 클릭 하십시오.


8

컨텍스트는 애플리케이션 / 오브젝트의 현재 상태 컨텍스트이며 다양한 환경 데이터를 나타내는 엔티티입니다. 컨텍스트는 현재 활동이 로컬 파일, 데이터베이스, 환경과 연관된 클래스 로더, 시스템 레벨 서비스를 포함한 서비스 등과 같은 외부 Android 환경과 상호 작용하는 데 도움이됩니다.

컨텍스트는 시스템에 대한 핸들입니다. 리소스 확인, 데이터베이스 및 기본 설정 액세스 등의 서비스를 제공합니다. 안드로이드 앱에는 활동이 있습니다. 응용 프로그램이 현재 실행중인 환경에 대한 핸들과 같습니다. 활동 객체는 Context 객체를 상속합니다.

컨텍스트를 가져올 수있는 다른 호출 메소드 1. getApplicationContext (), 2. getContext (), 3. getBaseContext () 4. 또는 이것 (활동 클래스에있을 때).


7

문맥은 Android가 내가 어떤 활동을하는지 또는 행동해야 하는지를 알게되는 것을 의미합니다.

1- Toast.makeText(context, "Enter All Details", Toast.LENGTH_SHORT).show(); 이것에 사용되었습니다. Context context = ActivityName.this;

2-startActivity(new Intent(context,LoginActivity.class));

이 문맥에서 다른 활동에 가고 싶은 활동을 의미합니다. 컨텍스트 또는 ActivityName. getContext 및 getApplicatinContext보다 빠릅니다.


6

A Context는 대부분의 사람들이 Application 이라고 부르는 것 입니다. 그것은 안드로이드 시스템에 의해 만들어졌으며 어플리케이션이 할 수있는 것만 할 수 있습니다. Tomcat에서 컨텍스트는 응용 프로그램이라고도합니다.

많은 활동을 보유하는 하나의 컨텍스트가 있으며 각 활동에는 많은보기가있을 수 있습니다.

분명히, 일부는 이것이 이것으로 적합하지 않다고 말하고 아마도 옳을 수도 있지만 컨텍스트가 현재 응용 프로그램이라고 말하면 메소드 매개 변수에 넣는 내용을 이해하는 데 도움이됩니다.


6

보스 어시스턴트 비유

문맥의 기술에 대해 깊이 탐구하기 전에 약간의 비유를 할 수 있습니다.

모든 보스에는 비서 나 그보다 덜 시간이 많이 걸리는 일을하는 사람이있다. 예를 들어, 파일이나 커피가 필요한 경우 보조자가 실행됩니다. 보스는 백그라운드에서 무슨 일이 일어나고 있는지 알지 못하지만 파일이나 작업이 전달됩니다.

여기
보스-Android Application
Assistant-컨텍스트
파일 또는 커피 한잔-리소스

컨텍스트 에 대한 공식 Android 개발자 사이트의 의견

컨텍스트는 응용 프로그램 관련 리소스에 대한 액세스 지점 입니다

그러한 자원이나 작업 중 일부를 보자

  • 활동을 시작합니다.

  • 파일 시스템에서 응용 프로그램 특정 캐시 디렉토리의 절대 경로를 가져옵니다.

  • 시스템에서 실행중인 특정 프로세스 및 사용자 ID에 대해 주어진 권한이 허용되는지 판별

  • 특정 권한이 부여되었는지 확인

등등.
따라서 Android 애플리케이션이 활동을 시작하려는 경우 바로 Context(액세스 포인트)로 이동합니다.Context 클래스가 리소스를 반환합니다 (이 경우 의도).

다른 클래스 Context클래스 와 마찬가지로 필드와 메소드가 있습니다. 공식 문서에서
Context많은 것을 탐색 할 수 있으며 거의 모든 것, 사용 가능한 메소드, 필드 및 메소드와 함께 필드를 사용하는 방법을 다룹니다.


@dhssa를 주셔서 감사합니다. 나는 안드로이드 문서의 요점을 제공하려고 노력했다 .. Shoul've 더 조심했다. "복사 된"부분 제거
Rohit Singh

5

android.content.Context 클래스의 인스턴스는 애플리케이션을 실행하는 Android 시스템에 대한 연결을 제공합니다. 예를 들어, 컨텍스트를 통해 현재 장치 디스플레이의 크기를 확인할 수 있습니다.

또한 프로젝트 리소스에 액세스 할 수 있습니다. 응용 프로그램 환경에 대한 전역 정보에 대한 인터페이스입니다.

Context 클래스는 또한 시간 기반 이벤트를 트리거하는 알람 관리자와 같은 Android 서비스에 대한 액세스를 제공합니다.

활동 및 서비스는 컨텍스트 클래스를 확장합니다. 따라서 컨텍스트에 액세스하는 데 직접 사용될 수 있습니다.


4

Context 를 Android의 다른 익숙한 클래스와 연결하려면 다음 구조를 명심하십시오.

컨텍스트 <ContextWrapper <응용 프로그램

컨텍스트 <ContextWrapper <ContextThemeWrapper <활동

컨텍스트 <ContextWrapper <ContextThemeWrapper <활동 <ListActivity

컨텍스트 <ContextWrapper <서비스

컨텍스트 <ContextWrapper <서비스 <IntentService

따라서 이러한 모든 클래스는 고유 한 방식으로 컨텍스트입니다. 원하는 경우 ServiceListActivity컨텍스트로 캐스트 할 수 있습니다 . 그러나 자세히 살펴보면 일부 클래스도 테마를 상속합니다. 액티비티 또는 프래그먼트에서 테마를 뷰에 적용하고 싶지만 예를 들어 Service 클래스는 신경 쓰지 않습니다 .

나는 여기 에 맥락의 차이를 설명합니다 .


4

간단하게 말하면 안드로이드 Context는 걱정할 때까지 사랑하지 않을 엉망입니다.

안드로이드 Context는 :

  • 신의 대상.

  • Android 개발을 시작할 때 모든 응용 프로그램을 전달하고 싶지만 프로그래밍, 테스트 및 Android 자체에 조금 더 가까워지면 그렇게하지 않는 것입니다.

    • 불확실한 의존성.

    • 일반적인 메모리 누수 소스.

    • 테스트를위한 PITA.

  • Android 시스템에서 사용 권한, 리소스, 환경 설정, 서비스, 브로드 캐스트, 스타일, 대화 상자 표시 및 레이아웃 팽창을 위해 사용되는 실제 컨텍스트입니다. 그리고 Context별도의 것들에 대해 다른 인스턴스 가 필요합니다 (물론, 응용 프로그램 또는 서비스 컨텍스트에서 대화 상자를 표시 할 수는 없습니다. 응용 프로그램 및 활동 컨텍스트에서 팽창 된 레이아웃은 다를 수 있습니다).


4

컨텍스트는 리소스, 데이터베이스, 개인 파일 디렉토리, 환경 설정, 설정과 같은 액세스 앱 개인 데이터를 제공 하는 각 앱의 샌드 박스 에 대한 안드로이드 특정 API입니다 ...

대부분의 개인 정보는 한 응용 프로그램의 모든 활동 / 서비스 / 방송 청취자에 대해 동일합니다.

Application, Activity, Service는 Context 인터페이스를 구현하므로 API 호출에 Context 매개 변수가 필요한 경우 사용할 수 있습니다.


4

Context다양한 기간의 구성 요소 (또는 응용 프로그램)를 의미합니다. 오후 1시에서 2시 사이에 너무 많은 음식을 먹으면 그 시간에 대한 나의 맥락은 그 시간 동안 사용하는 모든 방법 (또는 자원)에 액세스하는 데 사용됩니다. 콘텐츠는 특정 시간 동안의 구성 요소 (애플리케이션)입니다. Context응용 프로그램 구성 요소의 구성 요소는 구성 요소 또는 응용 프로그램의 기본 수명주기에 따라 계속 변경됩니다. 예를 들어,에서 onCreate의 () 안에 Activity,

getBaseContext()- 제공 contextActivity활성의 생성자에 의해 설정 (생성)되어있다. getApplicationContext()- Context응용 프로그램을 만드는 동안 설정 (생성)을 제공합니다 .

참고 : <application>모든 Android 구성 요소를 보유합니다.

<application>
    <activity> .. </activity> 

    <service>  .. </service>

    <receiver> .. </receiver>

    <provider> .. </provider>
</application> 

즉, getApplicationContext()어떤 구성 요소를 내부에서 호출 할 때 전체 응용 프로그램의 공통 컨텍스트 를 호출한다는 의미 입니다.

Context 구성 요소의 수명주기에 따라 시스템에서 계속 수정합니다.


1

컨텍스트는 문자열, 색상 및 글꼴과 같은 다른 리소스가있는 상자로 생각하십시오. 자원이 필요하면이 상자로 이동하십시오. 화면을 회전하면 방향이 가로로 바뀌기 때문에이 상자가 변경됩니다.


0

 Context전류를 의미합니다. Context현재 화면을 조작하는 데 사용합니다. 전의.
  1. getApplicationContext ()
  2. getContext ()

Toast.makeText(getApplicationContext(), "hello", Toast.LENGTH_SHORT).show();


-7

Java 에서이 키워드는 응용 프로그램의 현재 객체 상태를 나타냅니다.
마찬가지로, Context안드로이드 개발에 대안이 있습니다 .

명시 적 또는 암시 적으로 정의 할 수 있습니다.

Context con = this;

getApplicationContext();

getBaseContext();

getContext();

내가 생각하는 현재 활동의 대상 일 수 있습니다. 나는 이런 식으로 몇 번 사용하는 것처럼 사용합니다.
Ohiovr

1
상황에 맞는 다양한 방법이 있습니다. 전화 this는 활동에서만 작동합니다. 컨텍스트는 "this"의 대안이 아닙니다. 컨텍스트는 시스템 기능 등에 액세스하는 데 사용됩니다. 컨텍스트를 과도하게 단순화하고 주요 요점을 누락했습니다.
Zoe

-10

이 속성은이 레이아웃이 기본적으로 어떤 활동과 연관되어 있는지 선언합니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.