답변:
간단히 말하면 :
이름에서 알 수 있듯이 응용 프로그램 / 오브젝트의 현재 상태 컨텍스트입니다. 새로 생성 된 개체가 진행중인 작업을 이해할 수 있습니다. 일반적으로 프로그램의 다른 부분 (활동 및 패키지 / 응용 프로그램)에 관한 정보를 얻기 위해 호출합니다.
당신은 호출하여 컨텍스트를 얻을 수 있습니다 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, ...);
context.getSystemService(LAYOUT_INFLATER_SERVICE)
에서 어디에 어떻게 context
정의되어 있습니까?
Person-X는 스타트 업 소프트웨어 회사의 CEO입니다.
회사에는 수석 아키텍트가 있으며이 수석 아키텍트는 데이터베이스, UI 등과 같은 회사의 모든 작업을 수행합니다.
이제 CEO는 새로운 개발자를 고용합니다.
데이터베이스 또는 UI 등에서 작업 할 것인지 여부는 새로운 사람의 기술을 기반으로 새로 고용 된 사람의 책임을 말하는 건축가입니다.
앱의 리소스에 대한 안드로이드 활동의 액세스와 같습니다.
호텔을 방문 할 때와 비슷하며 적절한 타이밍에 아침, 점심 및 저녁 식사를 원하십니까?
머무는 동안 좋아하는 다른 것들이 많이 있습니다. 이런 것들을 어떻게 얻습니까?
룸 서비스 직원에게 이러한 물건을 가져 오도록 요청하십시오.
여기 룸 서비스 담당자는 귀하가 단일 활동이고 호텔이 앱이 될 것을 고려하는 맥락입니다. 결국 아침, 점심 및 저녁 식사는 자원이어야합니다.
맥락과 관련된 것들은 다음과 같습니다.
이것을 설명하는 또 다른 방법 : 텔레비전에서 TV 및 채널의 원격으로 컨텍스트를 고려하십시오. 인 텐트 등을 사용하는 리소스, 서비스,---여기서 원격은 모든 다른 리소스에 대한 액세스를 포 그라운드로 가져 오는 액세스 역할을합니다.
따라서 Remote는 인 텐트 등을 사용하여 리소스, 서비스 등의 채널에 액세스 할 수 있습니다.
마찬가지로 ... 원격에 액세스 할 수있는 사람은 자원, 서비스, 의도 등을 사용하여 모든 것에 액세스 할 수 있습니다
상황을 파악할 수있는 다양한 방법
getApplicationContext()
getContext()
getBaseContext()
this
(활동 수업에서)예:
TextView tv = new TextView(this);
키워드 this
는 현재 활동의 컨텍스트를 나타냅니다.
getApplicationContext()
, getContext()
, getBaseContext()
.....이 참조 -> ( stackoverflow.com/a/10641257 )
SomeActivityName.this
. 경우에 따라 호출해야 할 수도 있습니다 . 실의 실에서 실은 실이 아니라 실을 this
말한다
Android의 Context 주제는 많은 사람들에게 혼란스러워합니다. 사람들은 Android에서 기본 작업을 수행하기 위해 컨텍스트가 자주 필요하다는 것을 알고 있습니다. 사람들은 문맥이 필요한 일부 작업을 수행하려고 시도하고 올바른 문맥을 얻는 방법을 모릅니다. Android의 Context라는 아이디어를 이해하려고 노력할 것입니다. 이 문제에 대한 전체적인 처리는이 게시물의 범위를 벗어나지 만 컨텍스트의 정의와 사용 방법을 이해할 수 있도록 일반적인 개요를 제공하려고합니다. 컨텍스트가 무엇인지 이해하려면 소스 코드를 살펴 보겠습니다.
문맥이란 정확히 무엇입니까?
문서 자체는 다소 간단한 설명을 제공합니다. Context 클래스는 "응용 프로그램 환경에 대한 전역 정보에 대한 인터페이스"입니다.
Context 클래스 자체는 추상 클래스로 선언되며,이 클래스의 구현은 Android OS에서 제공됩니다. 이 문서는 또한 Context는“… 어플리케이션 특정 리소스 및 클래스에 대한 액세스는 물론 액티비티 시작, 방송 및 수신 의도 등과 같은 애플리케이션 레벨 작업에 대한 상향 호출을 허용합니다.
이름이 문맥 인 이유를 매우 잘 이해할 수 있습니다. 그것은 단지 그 때문입니다. 컨텍스트는 활동, 서비스 또는 기타 구성 요소에 대한 링크 또는 후크를 제공하여이를 시스템에 링크하여 글로벌 애플리케이션 환경에 액세스 할 수 있도록합니다. 다시 말해, 문맥은“일반적으로 앱과 관련하여 대체 어디 있는가와 나머지 앱과 어떻게 통신 / 통신합니까?”라는 구성 요소 질문에 대한 답변을 제공합니다. 이 모든 것이 약간 혼란스러워 보인다면, Context 클래스에 의해 노출 된 메소드를 간단히 살펴보면 그 본질에 대한 추가 힌트를 얻을 수 있습니다.
이러한 방법의 무작위 샘플링은 다음과 같습니다.
getAssets()
getResources()
getPackageManager()
getString()
getSharedPrefsFile()
이 모든 방법의 공통점은 무엇입니까? 이들은 모두 컨텍스트에 대한 액세스 권한이있는 모든 사람이 애플리케이션 전체 자원에 액세스 할 수 있도록합니다.
즉, 컨텍스트는이를 참조하는 구성 요소를 나머지 응용 프로그램 환경에 연결합니다. 예를 들어 활동, 서비스 또는 해당 자원에 액세스하는 방법을 알고있는 경우 자산 (예 : 프로젝트의 '/ assets'폴더 생각)은 응용 프로그램에서 사용할 수 있습니다. 동일은 간다 getResources()
하는 등의 작업을 수행 할 수 있습니다 getResources().getColor()
로 당신을 후크되는 colors.xml
리소스 (aapt에 별도의 문제입니다 자바 코드를 통해 리소스에 액세스 할 수 있도록 신경 끄시 고 있음).
결론적으로 즉 Context
시스템 리소스에 대한 액세스를 가능하게하고 무엇을 "큰 응용 프로그램"의 서브 클래스에서. 살펴 보자로 구성 요소를 사귀는 것입니다 Context
, 추상의 구현을 제공하는 클래스 Context
클래스를. 가장 눈에 띄는 클래스가 있습니다 Activity
클래스입니다. Activity
상속 에서 ContextThemeWrapper
어떤에서 상속 ContextWrapper
에서 어떤 상속 Context
그 클래스가 깊은 수준에서 사물을 이해하는보기 위하여 유용하지만, 지금은 그것을 알고 충분한입니다 자체. ContextThemeWrapper
그리고 ContextWrapper
꽤 많은 사람들이 같은 소리 것입니다. 그들은의 추상적 인 요소를 구현 Context
컨텍스트 (실제 컨텍스트)를 "래핑"하고 해당 함수를 해당 컨텍스트에 위임하여 클래스 자체를 설명합니다.ContextWrapper
클래스에서 클래스의 추상 메소드 getAssets
는 Context
다음과 같이 구현됩니다.
@Override
public AssetManager getAssets() {
return mBase.getAssets();
}
mBase
생성자에 의해 특정 컨텍스트로 설정된 필드입니다. 따라서 컨텍스트가 랩핑되고 ContextWrapper
getAssets 메소드의 구현이 해당 컨텍스트에 위임됩니다. 이 Activity
클래스가 Context
어떻게 작동하는지 궁극적으로 상속받은 클래스를 다시 살펴 봅시다 .
아마도 활동이 무엇인지 알지만 검토해야 할 것은 기본적으로 사용자가 할 수있는 한 가지 일입니다. 사용자가 상호 작용하는 UI를 배치 할 수있는 창을 제공합니다. 다른 API 및 개발자가 아닌 개발자에게 친숙한 개발자는이 용어를 "스크린"이라고 생각할 수 있습니다. 기술적으로 부정확하지만 우리의 목적에는 중요하지 않습니다. 그럼 어떻게 할 Activity
과 Context
상호 작용과 상속 관계에서 정확히 무엇을하려고?
다시 한 번 구체적인 예를 살펴보면 도움이됩니다. 우리는 모두 활동을 시작하는 방법을 알고 있습니다. 활동을 시작하는 "컨텍스트"가 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가 실제로 모든 것을 처리하는 곳입니다. 그렇다면 계측은 어떻게 정확하게 활동을 시작합니까? 글쎄, 위 this
의 execStartActivity
방법 의 매개 변수 는 귀하의 활동, 즉 컨텍스트 이며이 컨텍스트 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 클래스는 컨텍스트에 액세스 할 수있는 방식으로 작성할 수 있습니다. 컨텍스트를 취하는 공개 메소드를 공개 한 다음 필요에 따라 해당 클래스에서 사용하십시오.
컨텍스트는 시스템에 대한 핸들입니다. 리소스 확인, 데이터베이스 및 기본 설정에 대한 액세스 권한 얻기와 같은 서비스를 제공합니다. Android 앱에는 활동이 있습니다. 컨텍스트는 애플리케이션이 현재 실행중인 환경에 대한 핸들과 같습니다. 활동 오브젝트는 Context 오브젝트를 상속합니다.
Context
응용 프로그램 환경에 대한 전역 정보에 대한 "인터페이스"입니다. 실제로, Context
실제로 추상 클래스 구현이 안드로이드 시스템에 의해 제공됩니다.
응용 프로그램 별 리소스 및 클래스에 대한 액세스는 물론 활동 시작, 방송 및 수신 의도 등과 같은 응용 프로그램 수준 작업을위한 업 콜에 액세스 할 수 있습니다.
다음 그림 Context
에서이 계층의 루트 클래스 인 클래스 계층을 볼 수 있습니다 . 특히 Activity
의 자손 임을 강조 할 가치가 Context
있습니다.
Context
정확히 무엇입니까 ?
Android 참조 문서에 따르면 다양한 환경 데이터를 나타내는 엔티티입니다. 로컬 파일, 데이터베이스, 환경과 관련된 클래스 로더, 서비스 (시스템 레벨 서비스 포함) 등에 액세스 할 수 있습니다. 이 책과 Android를 통한 일상적인 코딩에서 컨텍스트가 자주 전달되는 것을 볼 수 있습니다.
" 실제로 안드로이드 "책에서 p. 60.
여러 Android API에는 Context
as 매개 변수가 필요합니다
다양한 Android API를 살펴보면 많은 API가 android.content.Context
객체를 매개 변수로 사용 한다는 것을 알 수 있습니다 . 또한 활동 또는 서비스가 일반적으로로 사용됨을 알 수
Context
있습니다. 이 두 클래스 모두에서 확장되기 때문에 작동합니다 Context
.
context
안드로이드 에서 이해하는 간단한 예 :
모든 보스에는 덜 중요하고 시간 소모적 인 작업을 수행하기 위해 돌보는 조수가 있습니다. 파일이나 커피 한 잔이 필요한 경우 조수가 달려 있습니다. 일부 상사는 사무실에서 무슨 일이 일어나고 있는지 거의 알지 못하므로 조수에게 이것에 대해서도 물어보십시오. 그들은 스스로 일을하지만 대부분의 다른 일에는 조수의 도움이 필요합니다.
이 시나리오에서는
보스 – 안드로이드 응용 프로그램입니다
조수 – 문맥
커피 파일 / 컵 – 자원
우리는 일반적으로 활동, 응용 프로그램 등과 같은 응용 프로그램의 다른 부분에 대한 정보를 얻어야 할 때 컨텍스트를 호출합니다.
컨텍스트가 관련된 일부 작업 (보조가 필요한 것) :
맥락을 얻는 다른 방법들 :
getContext()
getBaseContext()
getApplicationContext()
this
초보자를위한 것입니다.
먼저 단어 문맥을 이해하십시오.
영어 -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;
}
}
이제 비 활동 클래스에서 애플리케이션 컨텍스트를 원할 때마다이 메소드를 호출하면 애플리케이션 컨텍스트가 있습니다.
이 도움이되기를 바랍니다.)
클래스 android.content.Context
는 Android 시스템 및 프로젝트 리소스에 대한 연결을 제공합니다. 응용 프로그램 환경에 대한 전역 정보에 대한 인터페이스입니다.
컨텍스트는 또한 위치 서비스와 같은 Android 서비스에 대한 액세스를 제공합니다.
활동 및 서비스는 Context
수업을 확장합니다 .
컨텍스트는 android.content.Context 클래스의 인스턴스로, 애플리케이션을 실행하는 Android 시스템에 대한 연결을 제공합니다. 예를 들어, 컨텍스트를 통해 현재 장치 디스플레이의 크기를 확인할 수 있습니다.
또한 프로젝트 리소스에 액세스 할 수 있습니다. 응용 프로그램 환경에 대한 전역 정보에 대한 인터페이스입니다.
Context 클래스는 또한 시간 기반 이벤트를 트리거하는 알람 관리자와 같은 Android 서비스에 대한 액세스를 제공합니다.
활동 및 서비스는 컨텍스트 클래스를 확장합니다. 따라서 컨텍스트에 직접 액세스하는 데 사용할 수 있습니다.
컨텍스트 는 애플리케이션 환경에 대한 글로벌 정보에 대한 인터페이스입니다. 시스템에서 구현을 제공하는 추상 클래스입니다 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 을 방문 하십시오.
컨텍스트는 애플리케이션 / 오브젝트의 현재 상태 컨텍스트이며 다양한 환경 데이터를 나타내는 엔티티입니다. 컨텍스트는 현재 활동이 로컬 파일, 데이터베이스, 환경과 연관된 클래스 로더, 시스템 레벨 서비스를 포함한 서비스 등과 같은 외부 Android 환경과 상호 작용하는 데 도움이됩니다.
컨텍스트는 시스템에 대한 핸들입니다. 리소스 확인, 데이터베이스 및 기본 설정 액세스 등의 서비스를 제공합니다. 안드로이드 앱에는 활동이 있습니다. 응용 프로그램이 현재 실행중인 환경에 대한 핸들과 같습니다. 활동 객체는 Context 객체를 상속합니다.
컨텍스트를 가져올 수있는 다른 호출 메소드 1. getApplicationContext (), 2. getContext (), 3. getBaseContext () 4. 또는 이것 (활동 클래스에있을 때).
문맥은 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보다 빠릅니다.
문맥의 기술에 대해 깊이 탐구하기 전에 약간의 비유를 할 수 있습니다.
모든 보스에는 비서 나 그보다 덜 시간이 많이 걸리는 일을하는 사람이있다. 예를 들어, 파일이나 커피가 필요한 경우 보조자가 실행됩니다. 보스는 백그라운드에서 무슨 일이 일어나고 있는지 알지 못하지만 파일이나 작업이 전달됩니다.
여기
보스-Android Application
Assistant-컨텍스트
파일 또는 커피 한잔-리소스
컨텍스트는 응용 프로그램 관련 리소스에 대한 액세스 지점 입니다
그러한 자원이나 작업 중 일부를 보자
활동을 시작합니다.
파일 시스템에서 응용 프로그램 특정 캐시 디렉토리의 절대 경로를 가져옵니다.
시스템에서 실행중인 특정 프로세스 및 사용자 ID에 대해 주어진 권한이 허용되는지 판별
특정 권한이 부여되었는지 확인
등등.
따라서 Android 애플리케이션이 활동을 시작하려는 경우 바로 Context
(액세스 포인트)로 이동합니다.Context
클래스가 리소스를 반환합니다 (이 경우 의도).
다른 클래스 Context
클래스 와 마찬가지로 필드와 메소드가 있습니다. 공식 문서에서
더 Context
많은 것을 탐색 할 수 있으며 거의 모든 것, 사용 가능한 메소드, 필드 및 메소드와 함께 필드를 사용하는 방법을 다룹니다.
android.content.Context 클래스의 인스턴스는 애플리케이션을 실행하는 Android 시스템에 대한 연결을 제공합니다. 예를 들어, 컨텍스트를 통해 현재 장치 디스플레이의 크기를 확인할 수 있습니다.
또한 프로젝트 리소스에 액세스 할 수 있습니다. 응용 프로그램 환경에 대한 전역 정보에 대한 인터페이스입니다.
Context 클래스는 또한 시간 기반 이벤트를 트리거하는 알람 관리자와 같은 Android 서비스에 대한 액세스를 제공합니다.
활동 및 서비스는 컨텍스트 클래스를 확장합니다. 따라서 컨텍스트에 액세스하는 데 직접 사용될 수 있습니다.
Context 를 Android의 다른 익숙한 클래스와 연결하려면 다음 구조를 명심하십시오.
컨텍스트 <ContextWrapper <응용 프로그램
컨텍스트 <ContextWrapper <ContextThemeWrapper <활동
컨텍스트 <ContextWrapper <ContextThemeWrapper <활동 <ListActivity
컨텍스트 <ContextWrapper <서비스
컨텍스트 <ContextWrapper <서비스 <IntentService
따라서 이러한 모든 클래스는 고유 한 방식으로 컨텍스트입니다. 원하는 경우 Service 및 ListActivity 를 컨텍스트로 캐스트 할 수 있습니다 . 그러나 자세히 살펴보면 일부 클래스도 테마를 상속합니다. 액티비티 또는 프래그먼트에서 테마를 뷰에 적용하고 싶지만 예를 들어 Service 클래스는 신경 쓰지 않습니다 .
나는 여기 에 맥락의 차이를 설명합니다 .
간단하게 말하면 안드로이드 Context
는 걱정할 때까지 사랑하지 않을 엉망입니다.
안드로이드 Context
는 :
신의 대상.
Android 개발을 시작할 때 모든 응용 프로그램을 전달하고 싶지만 프로그래밍, 테스트 및 Android 자체에 조금 더 가까워지면 그렇게하지 않는 것입니다.
불확실한 의존성.
일반적인 메모리 누수 소스.
테스트를위한 PITA.
Android 시스템에서 사용 권한, 리소스, 환경 설정, 서비스, 브로드 캐스트, 스타일, 대화 상자 표시 및 레이아웃 팽창을 위해 사용되는 실제 컨텍스트입니다. 그리고 Context
별도의 것들에 대해 다른 인스턴스 가 필요합니다 (물론, 응용 프로그램 또는 서비스 컨텍스트에서 대화 상자를 표시 할 수는 없습니다. 응용 프로그램 및 활동 컨텍스트에서 팽창 된 레이아웃은 다를 수 있습니다).
Context
다양한 기간의 구성 요소 (또는 응용 프로그램)를 의미합니다. 오후 1시에서 2시 사이에 너무 많은 음식을 먹으면 그 시간에 대한 나의 맥락은 그 시간 동안 사용하는 모든 방법 (또는 자원)에 액세스하는 데 사용됩니다. 콘텐츠는 특정 시간 동안의 구성 요소 (애플리케이션)입니다. Context
응용 프로그램 구성 요소의 구성 요소는 구성 요소 또는 응용 프로그램의 기본 수명주기에 따라 계속 변경됩니다. 예를 들어,에서 onCreate의 () 안에 Activity
,
getBaseContext()
- 제공 context
의 Activity
활성의 생성자에 의해 설정 (생성)되어있다.
getApplicationContext()
- Context
응용 프로그램을 만드는 동안 설정 (생성)을 제공합니다 .
참고 : <application>
모든 Android 구성 요소를 보유합니다.
<application>
<activity> .. </activity>
<service> .. </service>
<receiver> .. </receiver>
<provider> .. </provider>
</application>
즉, getApplicationContext()
어떤 구성 요소를 내부에서 호출 할 때 전체 응용 프로그램의 공통 컨텍스트 를 호출한다는 의미 입니다.
Context
구성 요소의 수명주기에 따라 시스템에서 계속 수정합니다.
컨텍스트는 문자열, 색상 및 글꼴과 같은 다른 리소스가있는 상자로 생각하십시오. 자원이 필요하면이 상자로 이동하십시오. 화면을 회전하면 방향이 가로로 바뀌기 때문에이 상자가 변경됩니다.
Context
전류를 의미합니다.
Context
현재 화면을 조작하는 데 사용합니다. 전의.
1. getApplicationContext ()
2. getContext ()
Toast.makeText(getApplicationContext(), "hello", Toast.LENGTH_SHORT).show();
좋은 설명! 위의 모든 것을 보완하기 위해 MindOrks 의이 자료가 매우 유용하다는 것을 알았습니다. 심지어 나아갈 수있는 몇 가지 기본 사용 사례를 보여줍니다.
Java 에서이 키워드는 응용 프로그램의 현재 객체 상태를 나타냅니다.
마찬가지로, Context
안드로이드 개발에 대안이 있습니다 .
명시 적 또는 암시 적으로 정의 할 수 있습니다.
Context con = this;
getApplicationContext();
getBaseContext();
getContext();
this
는 활동에서만 작동합니다. 컨텍스트는 "this"의 대안이 아닙니다. 컨텍스트는 시스템 기능 등에 액세스하는 데 사용됩니다. 컨텍스트를 과도하게 단순화하고 주요 요점을 누락했습니다.