在日常Android開發(fā)中經(jīng)常會寫一些sdk來供他人或者自己調(diào)用,一般這些sdk都涉及到初始化,雖然這個初始化過程我們一般都會讓調(diào)用者自己來調(diào)用完成初始化過程。但是今天我們來介紹一個不需要調(diào)用者調(diào)用sdk初始化的方法,我們自己來完成這個初始化過程。下面來介紹方法
創(chuàng)建Library
首先我們創(chuàng)建個簡單的library,這個library的功能就很簡單:
- 需要傳入context
- 提供判斷是否已初始化的函數(shù)
class LibraryClient(val context: Context) {
var isInitialized = false
init {
isInitialized = true
}
fun hasInitialized(): Boolean {
return context != null && isInitialized
}
}
class Library {
companion object {
private var client: LibraryClient? = null
@Synchronized
fun init(context: Context) {
if (this.client == null) {
client = LibraryClient(context.applicationContext)
}
}
fun isInitialized(): Boolean {
client?.let {
return client!!.hasInitialized()
}
return false
}
}
}
主角:ContentProvider
這個ContentProvider功能很簡單就是在onCreate()里調(diào)用Library.init()方法,來初始化sdk
class InstallProvider: ContentProvider() {
override fun onCreate(): Boolean {
Library.init(context.applicationContext)
return true
}
override fun query(uri: Uri, projection: Array<String>?, selection: String?, selectionArgs: Array<String>?,
sortOrder: String?
): Cursor? {
return null
}
.....
}
<application>
<provider
android:authorities="${applicationId}.library-installer"
android:name=".InstallProvider"
android:exported="false"/>
</application>
驗證
這樣就結(jié)束了,我們驗證下是否已經(jīng)真的初始化了
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
printLibrary()
}
private fun printLibrary() {
logd("library is initialized: ${Library.isInitialized()}")
shortToast("library is initialized: ${Library.isInitialized()}")
}
}

image.png
結(jié)果顯示已初始化成功,這就結(jié)束了。至于為什么可以初始化成功,我們在下一篇文章解釋!