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

在日常Android开发中经常会写一些sdk来供他人或者自己调用,一般这些sdk都涉及到初始化,虽然这个初始化过程我们一般都会让调用者自己来调用完成初始化过程。但是今天我们来介绍一个不需要调用者调用sdk初始化的方法,我们自己来完成这个初始化过程。下面来介绍方法

创建Library

首先我们创建个简单的library,这个library的功能就很简单:

  • 需要传入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()方法,来初始化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>


验证

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

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

结果显示已初始化成功,这就结束了。至于为什么可以初始化成功,我们在下一篇文章解释!链接

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值