Android Koin 2 가 기본적으로 사용 하 는 거.
Kotlin 개발 자 에 게 적용 되 는 실 용적 인 경량급 의존 주입 프레임 워 크.
순수 Kotlin 으로 작성 되 었 습 니 다.기능 해상도 만 사용 합 니 다.프 록 시 없 이 코드 생 성 없 이 반사 되 지 않 습 니 다.
PS:KOIN 은 Kotion 과 Java 를 지원 합 니 다.
Koin 은 어떻게 설정 합 니까?
본 고 는 주로 Koin(2.0.1)이 AndroidX 에서 의 사용 을 설명 하기 때문에 koin-android 의존 도 를 직접 추가 합 니 다.
우선 Koin Android 기본 의존 도 추가
// Koin for Android
implementation "org.koin:koin-android:$koin_version"
Scope(범위)제어 에 사용 할 필요 가 있 으 면 의존 합 니 다. koin-androidx-scope
// Koin AndroidX Scope features
implementation "org.koin:koin-androidx-scope:$koin_version"
프로젝트 에 ViewModel 을 사용 하면 koin-android x-view model 에 의존 하 는 것 을 주저 하지 않 습 니 다.
// Koin AndroidX ViewModel features
implementation "org.koin:koin-androidx-viewmodel:$koin_version"
Kotlin 을 사용 한 이상 확장 기능 이 어떻게 적 을 수 있 습 니까?koin-androidx-ext 추가
// Koin AndroidX Experimental features
implementation "org.koin:koin-androidx-ext:$koin_version"
Koin 은 어떻게 사용 하나 요?Koin 입문 사용 이 상당히 쉽 습 니 다.아래 의 몇 가지 키 워드 를 배우 면 됩 니 다.따라 와 보 세 요~
factory
오늘 Activity 에 Girl 이 필요 합 니 다.(네~몇 개 일 수도 있 습 니 다.)그러면 의존 대상 을 만들어 서 Koin 을 사용 하여 주입 합 니 다.이때 저 는 매번 새로운(factory 사용)을 만들어 야 합 니 다.
val girlModule = module {
factory {
Girl()
}
}
의존 대상 이 생 겼 습 니 다.Koin 에 게 알려 야 합 니 다.그래서 저희 애플 리 케 이 션 에서 초기 화 를 해 야 합 니 다.
override fun onCreate() {
super.onCreate()
startKoin {
androidLogger(Level.DEBUG)
androidContext(this@App)
androidFileProperties()
modules(listOf(girlModule))
}
}
지금 은 다 있 는 것 같 아 요.이제 Activity 가 필요 할 때 어떻게 줘 야 하나 요?Activity 코드 보기:
//
class Simple1Activity : AppCompatActivity() {
private val girl by inject<Girl>()
//private lateinit var girl: Girl
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_sample1)
//girl = get()
ivImage.setImageResource(girl.getGirl())
}
}
얼굴 보니까 다 혼자 네!매번 새로운 걸 인 줄 어떻게 알았지?Girl 신분증 직접 확인 하기:
System.out: ---->com.joker.koin.model.Girl@a5b751b
System.out: ---->com.joker.koin.model.Girl@727e094
System.out: ---->com.joker.koin.model.Girl@e005b30
K,세 쌍둥이 구나..
single
지금 이 어느 시대 인 데 Girl 을 여러 개 즐 길 수 없 잖 아 요.그럼 factory 를 single 로 바 꾸 고 Girl 증명 서 를 확인 해 보 세 요.
val girlModule = module {
single {
Girl()
}
}
System.out: ---->com.joker.koin.model.Girl@48146b8System.out: ---->com.joker.koin.model.Girl@48146b8
System.out: ---->com.joker.koin.model.Girl@48146b8
이렇게 간단 한 우 리 는 단 례 를 실현 했다.뭐?동시에 걸 2 개 를 원 하고,유형 이 다 르 고 고정 적 이 어야 한다.괜 찮 습 니 다.저 희 는 Qualifier 와 Definition 이 있 습 니 다.
val girlModule = module {
single(named("girl1")) { (type: String) ->
Girl().apply {
this.type = type
}
}
single(named("girl2")) { (type: String) ->
Girl().apply {
this.type = type
}
}
}
Activity 가 어떻게 되 었 는 지:
class Simple2Activity : AppCompatActivity() {
private val girl1 by inject<Girl>(named("girl1")) { parametersOf(" ") }
private val girl2 by inject<Girl>(named("girl2")) { parametersOf(" ") }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_sample1)
ivImage.setImageResource(girl1.getGirl())
ivImage.postDelayed({
ivImage.setImageResource(girl2.getGirl())
}, 3000)
}
}
scope
scope 는 무엇 입 니까?나 는 사용 범위 가 생명 주기 와 유사 하 다 는 것 을 이해한다.우 리 는 그것 의 생존 범 위 를 통제 할 수 있다.
다른 밤 으로 입맛 을 바 꾸 고 효과 도 를 먼저 드 립 니 다.
val girlModule = module {
scope(named("scope")) {
scoped {
ScopeEntity()
}
}
}
scope 는 Qualifier 를 지정 해 야 합 니 다.scope 의존 도 를 만 들 었 습 니 다.다음은 createScope 와 bindScope 입 니 다.기본 값 을 설정 하 였 습 니 다. "Scope1Activity":
class Scope1Activity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_scope1)
// scope id qualifier,getScope id
val scope1 = getKoin().createScope("scope1", named("scope"))
// onDestory
bindScope(scope1)
scope1.get<ScopeEntity>().text = "Scope1Activity"
tvText.text = scope1.get<ScopeEntity>().text
btn.setOnClickListener {
startActivity(Intent(this, Scope2Activity::class.java))
}
}
override fun onResume() {
super.onResume()
tvText.text = getKoin().getScope("scope1").get<ScopeEntity>().text
}
}
Scope2Activity 에서 getScope 를 사용 하여 새 값"Scope2Activity"를 가 져 오고 수정 합 니 다:
class Scope2Activity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_scope1)
val scope1 = getKoin().getScope("scope1")
scope1.get<ScopeEntity>().text = "Scope2Activity"
tvText.text = scope1.get<ScopeEntity>().text
}
}
Scope1Activity 에서 onDestory 를 실행 할 때,그 중 에 정 해진 scope 는 이미 close 되 었 습 니 다.이때 getScope 는 이상 을 던 집 니 다.
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
// scope Scope1Activity onDestory
scope.postDelayed({
scope.text = try {
getKoin().getScope("scope1").get<ScopeEntity>().text
} catch (e: Exception) {
"scope back"
}
}, 3000)
}
다음 절차 설명:4.567917.Scope1Activity 에서 scope 1 설정 값 을 만 들 고 바 인 딩(bidscope)범 위 를 만 들 었 습 니 다4.567917.Scope2Activity 로 이동 하여 원래 의 값 을 먼저 표시 하고 수정 한 후에 되 돌려 줍 니 다.Scope1Activity 가 소각 되 지 않 았 기 때문에 onResume 에 새 값 을 표시 합 니 다
총결산
이상 은 이 글 의 모든 내용 입 니 다.본 고의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가 치 를 가지 기 를 바 랍 니 다.여러분 의 저희 에 대한 지지 에 감 사 드 립 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.