티스토리 뷰
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의 생성 라이프사이클이 로그에 출력된다.
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()
}
}
}
2. Activity Context
• 액티비티마다 존재
• 액티비티가 살아있는 동안 유지
• 액티비티의 현재 상태나 정보를 담고있다.
* 컨텍스트는 애플리케이션을 많이 개발해보고 다시 공부하는 것이 좋다.
• 많이 사용해보지 않은 상태에서 이해하기 어렵다.
이 글은
패스트 캠퍼스 Android 앱 개발의 정석 with Kotlin 올인원 패키지 Online
강의를 듣고 공부한 내용을 바탕으로 작성되었습니다.
'📱 Android > 💡 개념' 카테고리의 다른 글
[Android/개념] 8. Activity Stack(액티비티 스택) (0) | 2022.11.01 |
---|---|
[Android/개념] 7. Intent(인텐트) (0) | 2022.10.31 |
[Android/개념] 5. 앱 구성 요소(App Component) (0) | 2022.10.27 |
[Android/개념] 4. 뷰 컨트롤(View Control) (0) | 2022.10.24 |
[Android/개념] 3. Activity(액티비티) (0) | 2022.10.21 |