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

在平常Android开发中常常会写一些sdk来供他人或者本身调用,通常这些sdk都涉及到初始化,虽然这个初始化过程咱们通常都会让调用者本身来调用完成初始化过程。可是今天咱们来介绍一个不须要调用者调用sdk初始化的方法,咱们本身来完成这个初始化过程。下面来介绍方法android

建立Library

首先咱们建立个简单的library,这个library的功能就很简单:bash

  • 须要传入context
  • 提供判断是否已初始化的函数
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()里调用Library.init()方法,来初始化sdkapp

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>

复制代码

验证

这样就结束了,咱们验证下是否已经真的初始化了ide

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

结果显示已初始化成功,这就结束了。至于为何能够初始化成功,咱们在下一篇文章解释!函数

连接post

相关文章
相关标签/搜索