Я в основном создал приложение, в котором я сохраняю все данные mp3 в базе данных Realm, здесь все данные в виде строки извлекаются и сохраняются очень быстро, но когда дело доходит до извлечения и сохранения изображений в байтовом массиве, это действительно требуетдолго ждать, пока мое приложение извлечет и сохранит изображения в базе данных, что в конечном итоге приводит к задержке приложения.Ниже приведен мой код, который я сделал, пожалуйста, посмотрите.
// Этот метод предназначен для получения списков песен, в которых у меня возникают проблемы.
Примечание.попробуйте перехватить блок, здесь изображения успешно получены, но скорость очень низкая.
fun getSongList()
{
//query external audio
val musicResolver = context!!.getContentResolver()
val musicUri = android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI
val musicCursor = musicResolver.query(musicUri, null, null, null, null)
//iterate over results if valid
if (musicCursor != null && musicCursor.moveToFirst())
{
//get columns
val titleColumn = musicCursor.getColumnIndex(android.provider.MediaStore.Audio.Media.TITLE)
val idColumn = musicCursor.getColumnIndex(android.provider.MediaStore.Audio.Media._ID)
val artistColumn = musicCursor.getColumnIndex(android.provider.MediaStore.Audio.Media.ARTIST)
val url= musicCursor.getColumnIndex(android.provider.MediaStore.Audio.Media.DATA)
//add songs to list
do
{
val thisId = musicCursor.getLong(idColumn)
val thisTitle = musicCursor.getString(titleColumn)
val thisArtist = musicCursor.getString(artistColumn)
val thisurls = musicCursor.getString(url)
songList!!.add(Song(thisId, thisTitle, thisArtist,thisurls))
var byteArray:ByteArray?=null
try
{
val retriever = MediaMetadataRetriever()
retriever.setDataSource(thisurls)
val art = retriever.getEmbeddedPicture()
if (art != null) {
var bitmap=BitmapFactory.decodeByteArray(art, 0, art.size)
var stream = ByteArrayOutputStream()
bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream)
byteArray = stream.toByteArray()
}
else
{
val icon:Bitmap = BitmapFactory.decodeResource(context!!.getResources(), R.drawable.music)
var stream = ByteArrayOutputStream()
icon.compress(Bitmap.CompressFormat.PNG, 100, stream);
byteArray = stream.toByteArray()
}
}catch (e: Exception){
e.printStackTrace()
}
realm!!.beginTransaction()
var songitem = realm!!.createObject(Songdetails::class.java,Companion.getPrimaryKey())
songitem.songname = thisTitle
songitem.songartist = thisArtist
songitem.songurl = thisurls
songitem.songimage = byteArray
realm!!.commitTransaction()
}
while (musicCursor.moveToNext())
}
}
Любые предложения будут оценены!