Android Koin 2 가 기본적으로 사용 하 는 거.

9150 단어 androidkoin2쓰다
일단 KOIN 이 뭐 예요?
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@48146b8
System.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 에 새 값 을 표시 합 니 다
  • MainActivity 로 돌아 갑 니 다.scope 특성 상 이 때 는 해당 하 는 값 을 얻 을 수 없습니다
  • 데모 주소:github.com/joker-fu/sa..(로 컬 다운로드)
    총결산
    이상 은 이 글 의 모든 내용 입 니 다.본 고의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가 치 를 가지 기 를 바 랍 니 다.여러분 의 저희 에 대한 지지 에 감 사 드 립 니 다.

    좋은 웹페이지 즐겨찾기