因此,在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作为MyApp)
。
还有一个解释:我的应用程序中有类,例如,SharedReference单例,它是用上下文初始化的,作为单例,不能有参数。
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()
}
}
如果您想使用它来访问一些静态属性:您将只有一个应用程序实例,所以只需使用您为类指定的名称。不要担心它不是一个真正的单例,你可以用同样的方式使用它。
例子:
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。常量和MyApp。字体
应用程序中的任意位置。
-
如果您想要将其用作应用程序上下文,则可以为Context创建扩展属性:
val Context.myApp: MyApp
get() = applicationContext as MyApp
然后,您可以使用myApp
在任何有上下文的地方获取应用程序上下文。
您可以执行与Java相同的操作,即将应用程序
实例放在静态字段中。Kotlin没有静态字段,但对象中的属性可以静态访问。
class MyApp: Application() {
override fun onCreate() {
super.onCreate()
instance = this
}
companion object {
lateinit var instance: MyApp
private set
}
}
然后,您可以通过MyApp.instance
访问该属性。
问题内容: 我有一个facebook初始化sdk调用,启动应用程序时需要它来初始化: 我想使用我的Application类来做到这一点。例如: 我的主要活动是使用Facebook登录按钮: 我怎么称呼我的申请单身人士?我如何使其onCreate()工作? 问题答案: 要使您的App类遵循 Singleton设计模式 : 然后在其他任何类中使用它: 如果这是您要的..
本文向大家介绍AngularJS教程之简单应用程序示例,包括了AngularJS教程之简单应用程序示例的使用技巧和注意事项,需要的朋友参考一下 按以下步骤来创建AngularJS应用 第1步:加载框架 作为一个纯粹的JavaScript框架,它可以使用<script>标签来添加。 第2步:使用ng-app指令定义AngularJS应用 第3步:用 ng-model指令定义的模式名称 <p>Ent
我无法运行JavaFX-Kotlin应用程序。 我的初学者类 我不能将param“args”传递给“launch”方法,因为编译器说: 错误:(19,9)Kotlin:不能使用提供的参数调用以下函数:public open fun launch(p0:class!,vararg p1:string!):javafx.application.application中定义的单元public open
有人能解释这两个SpringBean作用域之间的区别吗?我熟悉单例模式。 这是唯一的区别吗?使用application scope,您可以在Spring容器中拥有一个beans列表。 此外,您是否能够在一个Spring容器中运行多个Web服务器?如果是,那将是使用应用程序范围而不是单例范围的原因,因为否则bean将在两个服务器上共享。
静态编程语言单例(更具体地说,对象声明)在结构上是线程安全的吗?如果不是,用静态编程语言编写线程安全单例的最佳实践是什么? 我想是的,但我在文件中找不到任何明确的声明。
我有一个用Kotlin(android studio)编写的android应用程序和用React Native编写的应用程序的UI。我的问题是这些能联系在一起吗?如果是,怎么做?还有,你们能发布一些我可以通过的链接吗。 附注:我对react Native一无所知。