Android

안드로이드의 Context 개념에 대한 개인적인 정리

최데브 2020. 7. 14. 20:39

Context 는 

 

어플리케이션 환경에 관한 글로벌 정보를 접근하기 위한 인터페이스. Abstract 클래스이며 실재 구현은 안드로이드 시스템에 의해 제공된다. Context 를 통해, 어플리케이션에 특화된 리소스나 클래스에 접근할 수 있을 뿐만 아니라, 추가적으로, 어플리케이션 레벨의 작업 - Activity 실행, Intent 브로드캐스팅, Intent 수신 등, 을 수행하기 위한 API 를 호출 할 수도 있다.

라고 안드로이드 개발자 사이트에서 찾아 볼 수 있는데 

 

쉽게 예를 들자면 

 

//Get an application name

String applicationName = this.getPackageName();

 

//Start a new activity(application)

this.startActivity(new Intent(this, Test.class));



위의 코드처럼 지금 있는 화면의 정보를 알 수 있게 나타내는 정보..?

 

 

자신이 어떤 어플리케이션을 나타내고 있는지 알려주는 ID 역할 

ActivityManagerService 에 접근할 수 있도록 하는 통로 역할 

 

을 한다고 한다. 

 

* ActivityManagerService 는 안드로이드의 프로세스를 따로 관리하는 매니저인데 여기서 어플리케이션을 관리할때

key - value 로 관리를 한다. 여기서 Context가 key의 역할을 한다고 생각하면 될거 같다.

 

 

 

아래 처럼 쓰일수도 있다.

 

popupview = View.inflate(getApplicationContext(), R.layout.sidepopup, null); //getApplicationContext()에서 Context를 가져옴


팝업뷰에 파라미터로 Context, int, ViewGroup 이 들어간다
다른거는 넘어가고 Context를 보면 getApplicationContext() 이게 현재 화면의 context를
지정하는 것으로, 저 popupview는 이제 메인화면 위에 뜬다는 소리다. 메인화면의 
Context를 받았기 때문.

 

아래 코드는 직접 작성한 코드인데 사실 이걸 작성하면서 든 의문으로 이 글을 적게 됐다.

    @Override
    public void onListItemClick(@NonNull ListView l, @NonNull View v, int position, long id) {
        ListViewItem item = (ListViewItem) l.getItemAtPosition(position);
        String userid = item.getTitle();
            //여기서 팝업창 띄우기
        //onMyListener.onReceivedData(userid);
        Intent intent = new Intent(v.getContext(), PopActivity.class);
        intent.putExtra("my_data" , userid);
        v.getContext().startActivity(intent); // 인텐트 넘어가는거 성공
        // v.getContext 를 하는 이유는 그냥 액티비티에서는 Context 를 굳이 안가져와도 되는데 여기서는 리스트들이 각각 존재하고
        // 이런 상황에서 그냥 startActivity만 적어서 실행하면 fragment 에는 Context가 없기 때문에 오류가 난다.
        // 그래서 각각 아이템의 view에서 getContext를 해주고 Context를 가지고 있는 상태에서 startActivity를 해야하는것이다.
		//그러면 어디서 이 화면으로 넘어가는구나 라는걸 어플리케이션이 알 수 있게 되는것이다.
        super.onListItemClick(l, v, position, id);
    }

확실하진 않지만 내가 이해한 바로는 코드에 있는 주석대로인거 같다.

여러가지도 찾아본 결과 나온 나만의 결론이지만 

확실하게 이해하기 위해선 좀 더 공부가 필요할거 같다.

 

반응형