溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在Android中實現服務定位器

發布時間:2021-03-31 16:45:48 來源:億速云 閱讀:226 作者:Leah 欄目:開發技術

本篇文章為大家展示了怎么在Android中實現服務定位器,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

引入

repositories { 
  maven { url "https://gitee.com/ezy/repo/raw/android_public/"}
} 
dependencies {
  implementation "me.reezy.jetpack:servicelocator:0.4.0" 
}

API

// 獲取實例
inline fun <reified T> resolve(name: String = T::class.java.name): T?
// 注冊為單例
inline fun <reified T> singleton(name: String = T::class.java.name, crossinline block: () -> T)
// 注冊為工廠
inline fun <reified T> factory(name: String = T::class.java.name, crossinline block: () -> T)

使用

單例,每次resolve獲得的都是同一實例

class SomeService {
  fun doSomething() {
  }
}

// 注冊 
singleton {
  SomeService()
}

// 獲取
val service = resolve<SomeService>()

具名單例

class NamedService(val name: String) {
  fun doSomething() {
  }
}

// 注冊 
singleton("a") {
  NamedService("aaa")
}
singleton("b") {
  NamedService("bbb")
}

// 獲取 
val serviceA = resolve<NamedService>("a")
val serviceB = resolve<NamedService>("b")

工廠,每次resolve都會產生新實例

class SomeService {
  fun doSomething() {
  }
}

// 注冊 
factory {
  SomeService()
}

// 獲取,每次resolve都會產生新實例
val service1 = resolve<SomeService>() 
val service2 = resolve<SomeService>()

具名工廠

class NamedService(val name: String) {
  fun doSomething() {
  }
}

// 注冊 
factory("a") {
  NamedService("aaa")
}
factory("b") {
  NamedService("bbb")
}

// 獲取
// A1 與 A2 是使用同一工廠產生的不同實例
// A1 與 B1 是使用不同工廠產生的不同實例
val serviceA1 = resolve<NamedService>("a")
val serviceA2 = resolve<NamedService>("a")
val serviceB1 = resolve<NamedService>("b")
val serviceB2 = resolve<NamedService>("b")

上述內容就是怎么在Android中實現服務定位器,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女