android - Kotlin 单例应用程序类

标签 android singleton kotlin

在 Android 上,我想将我的应用程序类设为 singleton .

制作成这样:

object MyApplication: Application(){}

行不通。运行时抛出以下错误:

java.lang.IllegalAccessException: private com....is not accessible from class android.app.Instrumentation.

这样做也是不可能的:

class MyApp: Application() {

    private val instance_: MyApp

    init{
        instance_ = this
    }

    override fun onCreate() {
        super.onCreate()
        if (BuildConfig.DEBUG) {
            Timber.plant(Timber.DebugTree());
        }
    }

    companion object{
        fun getInstance() = instance_
    }
}

如何在我的应用程序的任何地方获取我的应用程序类的实例?我想使用 MyApp.instance() 而不是 (applicationContext as MyApp)

还有我想要这个的解释:我的应用程序中有类(class)。例如,一个用上下文初始化的 SharedPreference Singleton,由于它是一个单例,它不能有参数。

最佳答案

您可以执行与 Java 相同的操作,即将 Application 实例放在静态字段中。 Kotlin 没有静态字段,但对象中的属性可以静态访问。

class MyApp: Application() {

    override fun onCreate() {
        super.onCreate()
        instance = this
    }

    companion object {
        lateinit var instance: MyApp
            private set
    }
}

然后您可以通过 MyApp.instance 访问该属性。

关于android - Kotlin 单例应用程序类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37391221/

相关文章:

android - 像 ViewFlipper 一样翻转 ViewPager,可能吗?

java - 将 `File[]` 转换为 `List<String>` 的更好方法

Android:如何使用 Graph API 从 Facebook 日历获取 friend 的出生日期

android - 为什么工具栏在屏幕中间?

C++ 获取对 SingleTune 类成员方法的访问权限 获取对不完整类型的成员访问权限

python - python 中枚举的合法用法

c# - 为什么 new() 约束必须需要公共(public)构造函数?

android - 无法在 Java 和 Kotlin 混合项目上使用 Dagger2 注入(inject)

android - 无法在Firebase数据库的userid文件夹内创建新路径

android - Android Studio 中的 Kotlin 构建失败