Android-使用ContentProvider來初始化你的sdk(一)

在日常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é)束了。至于為什么可以初始化成功,我們在下一篇文章解釋!

鏈接

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容