1 Star 0 Fork 2

chenjim / kotlin-for-android-developers-zh

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
applicatondan_li_hua.md 1.44 KB
一键复制 编辑 原始数据 按行查看 历史
WangJie 提交于 2015-10-28 14:49 . Update applicatondan_li_hua.md

Applicaton单例化

按照我们在Java中一样创建一个单例最简单的方式:

class App : Application() {
    companion object {
        private var instance: Application? = null
	    fun instance() = instance!!
    }
    override fun onCreate() {
        super.onCreate()
        instance = this
	}
}

为了这个Application实例被使用,要记得在AndroidManifest.xml中增加这个App

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme"
    android:name=".ui.App">
    ...
</application>

Android有一个问题,就是我们不能去控制很多类的构造函数。比如,我们不能初始化一个非null属性,因为它的值需要在构造函数中去定义。所以我们需要一个可null的变量,和一个返回非null值的函数。我们知道我们一直都有一个App实例,但是在它调用onCreate之前我们不能去操作任何事情,所以我们为了安全性,我们假设instance()函数将会总是返回一个非null的app实例。

但是这个方案看起来有点不自然。我们需要定义个一个属性(已经有了getter和setter),然后通过一个函数来返回那个属性。我们有其他方法去达到相似的效果么?是的,我们可以通过委托这个属性的值给另外一个类。这个就是我们知道的委托属性

1
https://gitee.com/chenjim/kotlin-for-android-developers-zh.git
git@gitee.com:chenjim/kotlin-for-android-developers-zh.git
chenjim
kotlin-for-android-developers-zh
kotlin-for-android-developers-zh
master

搜索帮助