Tag: 单机

如何在我的应用程序及其库中实例化一个Singleton?

我为我创建了一个Firebase云消息传递库,所以我可以在我的应用程序和我创建的所有其他库中使用它。 这是迄今为止工作。 然后我添加了一个FcmManager类,它管理所有Fcm相关的东西,比如刷新标记。 由于我可以在我的应用程序和其他库中使用这个FcmLibrary,我想使它成为一个Singleton,所以这个FcmManager只实例化一次。 这里的问题是在FcmManager中我有一个Context参数。 在活动中: val fcmManager = FcmManager(this) 我该如何解决这个问题?

Kotlin SingleTon应用程序类

所以在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单一的上下文初始化,作为一个单身,不能有参数。

在kotlin使用房间作为单身人士

我试图使用房间作为单身人士,所以我不必调用Room.databaseBuilder() – 这是昂贵的不止一次。 @Database(entities = arrayOf( Price::class, StationOrder::class, TicketPrice::class, Train::class, TrainCategory::class ), version = 2) @TypeConverters(Converters::class) abstract class AppDatabase : RoomDatabase() { abstract fun dao(): TrainDao companion object { fun createDatabase(context: Context): AppDatabase = Room.databaseBuilder(context, AppDatabase::class.java, "trains.db").build() } } 注意: 因为Room需要使用abstract class所以不能使用Object。 单例必须是线程安全的,因为多个线程可以同时访问它。 必须能够把Context作为一个参数。 我已经看过所有类似的StackOverflow问题,并没有满足我的要求 在Kotlin中有论点的单身人士 不是线程安全的 Kotlin – 在Android中转换Singleton DatabaseController的最佳方法 是线程安全的 Kotlin线程保存与参数 使用对象的 本地懒惰单例