执行从 SharedPrefs 到 DataStore 的迁移非常简单并且有很好的文档记录。但是,当我想要从 DataStore 到静态 DataStore 进行简单的“版本碰撞”迁移时,这意味着某些键可能已更改等。应该如何执行此操作?
就我现在看来,我们需要在创建DataStore时在migrations参数中手动实现这些功能。
PreferenceDataStoreFactory.create(
migrations = listOf(
object : DataMigration<Preferences> {
override suspend fun cleanUp() {
TODO("Not yet implemented")
}
override suspend fun migrate(currentData: Preferences): Preferences {
TODO("Not yet implemented")
}
override suspend fun shouldMigrate(currentData: Preferences): Boolean {
TODO("Not yet implemented")
}
},
),
produceFile = {
get<Context>().preferencesDataStoreFile("filename")
}
)
Run Code Online (Sandbox Code Playgroud)
我还没有看到有人谈论它,或者不幸的是它是 Codelab 的一部分,这对我来说是一个很大的惊喜。有人可以指出我可以在哪里寻找一些有关如何正确执行此操作的灵感吗?
android sharedpreferences android-jetpack android-jetpack-datastore
使用 swift,可以使用 SwiftUI 编写小部件,但我没有看到任何关于是否可以使用 Jetpack Compose 构建 Android 应用小部件的声明。
现在 Compose 处于 Alpha 阶段,是否有任何信息可以让我看到如何做到这一点?
我想在我的 Room 数据库中保存一个对象,其中一个变量可以是一种类型或另一种类型。我认为密封类是有意义的,所以我采取了这种方法:
sealed class BluetoothMessageType() {
data class Dbm(
val data: String
) : BluetoothMessageType()
data class Pwm(
val data: String
) : BluetoothMessageType()
}
Run Code Online (Sandbox Code Playgroud)
甚至是这样,但没有必要。我发现这个给了我更多的错误,因为它不知道如何处理 open val,所以如果我找到第一个版本的解决方案,无论如何我都会很高兴。
sealed class BluetoothMessageType(
open val data: String
) {
data class Dbm(
override val data: String
) : BluetoothMessageType()
data class Pwm(
override val data: String
) : BluetoothMessageType()
}
Run Code Online (Sandbox Code Playgroud)
然后是实体类
@Entity(tableName = MESSAGES_TABLE_NAME)
data class DatabaseBluetoothMessage(
@PrimaryKey(autoGenerate = true)
val id: Long = 0L,
val time: Long = Instant().millis,
val …Run Code Online (Sandbox Code Playgroud) 当尝试对特定方法进行基准测试时,关于创建了多少对象以及在该方法运行时它们占用了多少字节,在 Android 中可以这样做:
Debug.resetThreadAllocCount()
Debug.resetThreadAllocSize()
Debug.startAllocCounting()
benchmarkMethod()
Debug.stopAllocCounting()
var memoryAllocCount = Debug.getThreadAllocCount()
var memoryAllocSize = Debug.getThreadAllocSize()
Run Code Online (Sandbox Code Playgroud)
我现在想对相同的方法进行基准测试,但在这些方法不可用的普通桌面应用程序上。我没有发现任何类似的东西,我尝试过的任何其他内存基准测试代码都没有提供一致的结果,就像上面的代码一样,每次运行相同的基准测试时都会给出完全相同的结果。
任何建议,最好只是代码将不胜感激,但是如果它能够执行我正在尝试做的任务,我也愿意尝试一些软件。