joh*_*crq 36 singleton android kotlin
所以在android中我想让我的应用程序类成为单例.
像这样:
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).
还解释了为什么我想要这个:我在我的应用程序中有类,例如,使用上下文初始化的SharedPreference Singleton,并且作为它的单例,不能有参数.
Kir*_*man 77
您可以执行与Java相同的操作,即将Application实例放在静态字段中.Kotlin没有静态字段,但对象中的属性是静态可访问的.
class MyApp: Application() {
    override fun onCreate() {
        super.onCreate()
        instance = this
    }
    companion object {
        lateinit var instance: MyApp
            private set
    }
}
然后您可以通过酒店进入酒店MyApp.instance.
nit*_*ico 33
如果您想使用它来访问某些静态属性,那么:您只有一个Application实例,所以只需使用您为该类提供的名称即可.不要担心它不是一个真正的单身人士,你可以用同样的方式使用它.
例:
class MyApp : Application() {
    companion object {
        const val CONSTANT = 12
        lateinit var typeface: Typeface
    }
    override fun onCreate() {
        super.onCreate()
        typeface = Typeface.createFromAsset(assets, "fonts/myFont.ttf")
    }
}
然后你可以使用MyApp.CONSTANT,并MyApp.typeface在您的应用程序的任何地方.
-
如果您想要将其用作应用程序上下文,则可以为Context创建扩展属性:
val Context.myApp: MyApp
        get() = applicationContext as MyApp
然后,您可以使用myApp在具有上下文的任何位置获取应用程序上下文.
Raj*_*har 11
    class AppController : Application() {
        init {
            instance = this
        }
        companion object {
            private var instance: AppController? = null
            fun applicationContext() : AppController {
                return instance as AppController
            }
        }
        override fun onCreate() {
            super.onCreate()
        }
    }
| 归档时间: | 
 | 
| 查看次数: | 28821 次 | 
| 最近记录: |