티스토리 뷰

728x90

 


Context

• 사전적으로는 문맥, 맥락, 전후사정을 의미한다.

     - 안드로이드에서는 앱의 흐름을 의미

• 애플리케이션나 액티비티의 현재 상태를 나타낸다.

• 정보를 얻기 위해 사용한다.

• Activity, Application 클래스는 전부 Context를 상속받아 구체화된 것이다.

     -> Context 타입이 필요한 자리에 Activity, Application 클래스를 넣어도 된다.

 

1. Application Context

• 애플리케이션에 하나만 존재

• 애플리케이션이 살아있는 동안 유지

• 애플리케이션의 현재 상태나 정보를 담고있다.

• 애플리케이션 전체에서 사용할 정보나 함수를 저장해두기 좋다.

 

ex) 애플리케이션의 현재 액티비티 라이프사이클 상태 확인

     - Application Context를 상속하는 새 코틀린 클래스 생성

package com.example.fastcampus

import android.app.Activity
import android.app.Application
import android.os.Bundle
import android.util.Log

class MasterApplication: Application() {
    override fun onCreate() {
        super.onCreate()

        registerActivityLifecycleCallbacks(object: Application.ActivityLifecycleCallbacks {
            override fun onActivityCreated(p0: Activity, p1: Bundle?) {
                Log.d("testt", "" + p0 + " : " + "onActivityCreated")
            }

            override fun onActivityStarted(p0: Activity) {
                Log.d("testt", "" + p0 + " : " + "onActivityStarted")
            }

            override fun onActivityResumed(p0: Activity) {
                Log.d("testt", "" + p0 + " : " + "onActivityResumed")
            }

            override fun onActivityPaused(p0: Activity) {
                Log.d("testt", "" + p0 + " : " + "onActivityPaused")
            }

            override fun onActivityStopped(p0: Activity) {
                Log.d("testt", "" + p0 + " : " + "onActivityStopped")
            }

            override fun onActivitySaveInstanceState(p0: Activity, p1: Bundle) {
                Log.d("testt", "" + p0 + " : " + "onActivitySaveInstanceState")
            }

            override fun onActivityDestroyed(p0: Activity) {
                Log.d("testt", "" + p0 + " : " + "onActivityDestroyed")
            }
        })
    }
}

 

     - 해당 클래스 AndroidManifest.xml에 등록

          -> application 태그의 속성에 android:name="클래스 이름"

          - 이 application의 Application Context는 이 MasterApplication 파일이다! 라고 알려주는 것.

<?xml version="1.0" encoding="utf-8"?>
<manifest ...생략... >

	...생략...

    <application
    
        ...생략...
        
        android:name=".MasterApplication"
        
        ...생략... >
        
    </application>

</manifest>

 

     - 결과

          - Application Context에서 Activity1과 Activity2의 라이프사이클 확인.

          - Activity1에서 Activity2로 화면전환 시 Activity1의 멈춤과 Activity2의 생성 라이프사이클이 로그에 출력된다.

Application Context에서 애플리케이션의 모든 액티비티의 라이프사이클을 확인할 수 있다.

 

ex) 애플리케이션 전체에서 사용 가능한 정보와 함수

package com.example.fastcampus

import android.app.Application
import android.util.Log

class MasterApplication_07: Application() {
    val userId: Int = 1234
    
    fun applicationFunc() {
        Log.d("testt", "applicationFunc")
    }
}

 

• ContextTwo_07.kt

     - 액티비티에서 applicationContext 키워드로 Application Context에 접근 가능하다.

package com.example.fastcampus

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.widget.TextView

class ContextTwo_07 : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_context_two07)

        findViewById<TextView>(R.id.textView1).setOnClickListener {
            val userId = (applicationContext as MasterApplication_07).userId
            Log.d("testt", "" + userId)
            (applicationContext as MasterApplication_07).applicationFunc()
        }
    }
}

Application Context에 저장된 정보와 함수를 액티비티에서 접근하여 출력한 모습

 

 

2. Activity Context

• 액티비티마다 존재

• 액티비티가 살아있는 동안 유지

• 액티비티의 현재 상태나 정보를 담고있다.

 

* 컨텍스트는 애플리케이션을 많이 개발해보고 다시 공부하는 것이 좋다.

• 많이 사용해보지 않은 상태에서 이해하기 어렵다.

 

 

 

 

 

 

 

 

이 글은

패스트 캠퍼스 Android 앱 개발의 정석 with Kotlin 올인원 패키지 Online

강의를 듣고 공부한 내용을 바탕으로 작성되었습니다.

 


728x90
댓글
250x250
공지사항