Kotlin Android 在数据中存储位图图像的最佳方式是什么 class
Kotlin Android what is the Optimal way to store Bitmap Image in a data class
我有一个非常简单的问题..我正在制作一个音乐播放器应用程序并尝试将音乐曲目缩略图存储在数据中 class。
目前我是这样做的
data class Track(
val uuid : UUID = UUID.randomUUID(),
val track_id : Long = 233223,
val track_title : String?,
val track_length : Float,
val track_album : String?,
val track_bitmap: Bitmap?,
val track_artist : String?,
val info_format : String
)
track_bitmap : Bitmap?
也是吗?
请记住,我是初学者,我还计划实施房间数据库以缓存曲目列表及其图像,并且我正在使用 Jetpack Compose。
那么在这种情况下存储位图图像的最佳推荐方式是什么。非常感谢任何建议:)
位图会占用大量内存,持有对大量位图的引用会增加内存压力,如果用户有 1000 条曲目则无法很好地缩放(Android/Image 库将进行内部缓存,但那是范围)。
相反,您可以将缩略图的引用作为 Uri
或 long
图片 ID 并在需要时加载它 - 如果它不在屏幕上则不需要保留图片.这也减少了作为位图存储的重复缩略图,因为许多曲目可以使用相同的缩略图。
然后您可以使用:
对于 Api 29+ :
val bitmap = contentResolver.loadThumbnail(track.thumbnailUri, Size(width, height), null)
或低于Api 29 :
val bitmap = MediaStore.Images.Thumbnails.getThumbnail(contentResolver, track.thumbNailId, MediaStore.Images.Thumbnails.KIND, null)
通常只使用 Uri
并将其传递给 Glide、Picasso 或 Coil 等图像加载库。如果使用大量图像,我建议使用一个库,因为它通常有一个很好的 api 表面,允许您拥有自定义占位符图像、异步加载和过渡动画,从而提供更好的用户体验。
我有一个非常简单的问题..我正在制作一个音乐播放器应用程序并尝试将音乐曲目缩略图存储在数据中 class。
目前我是这样做的
data class Track(
val uuid : UUID = UUID.randomUUID(),
val track_id : Long = 233223,
val track_title : String?,
val track_length : Float,
val track_album : String?,
val track_bitmap: Bitmap?,
val track_artist : String?,
val info_format : String
)
track_bitmap : Bitmap?
也是吗?
请记住,我是初学者,我还计划实施房间数据库以缓存曲目列表及其图像,并且我正在使用 Jetpack Compose。
那么在这种情况下存储位图图像的最佳推荐方式是什么。非常感谢任何建议:)
位图会占用大量内存,持有对大量位图的引用会增加内存压力,如果用户有 1000 条曲目则无法很好地缩放(Android/Image 库将进行内部缓存,但那是范围)。
相反,您可以将缩略图的引用作为 Uri
或 long
图片 ID 并在需要时加载它 - 如果它不在屏幕上则不需要保留图片.这也减少了作为位图存储的重复缩略图,因为许多曲目可以使用相同的缩略图。
然后您可以使用:
对于 Api 29+ :
val bitmap = contentResolver.loadThumbnail(track.thumbnailUri, Size(width, height), null)
或低于Api 29 :
val bitmap = MediaStore.Images.Thumbnails.getThumbnail(contentResolver, track.thumbNailId, MediaStore.Images.Thumbnails.KIND, null)
通常只使用 Uri
并将其传递给 Glide、Picasso 或 Coil 等图像加载库。如果使用大量图像,我建议使用一个库,因为它通常有一个很好的 api 表面,允许您拥有自定义占位符图像、异步加载和过渡动画,从而提供更好的用户体验。