我正在制作音乐播放器,后来到了要为每首歌曲加载艺术封面的地步。目前,我的手机上有450多首歌曲,我的主题列表需要53秒才能完成。还有其他方法可以更快地做到吗?
new Thread(new Runnable() {
MediaMetadataRetriever metaRetreiver = new MediaMetadataRetriever();
@Override
public void run() {
for (int i = 0; i < baseSongList.size(); i++) {
try {
metaRetreiver.setDataSource(baseSongList.get(i).getPathID());
byte[] art = metaRetreiver.getEmbeddedPicture();
if (art != null) {
BitmapFactory.Options opt = new BitmapFactory.Options();
opt.inJustDecodeBounds = true; //just check size of image
BitmapFactory.decodeByteArray(art, 0, art.length, opt);
// assign values of image
int imageHeight = opt.outHeight;
int imageWidth = opt.outWidth;
//condition to determine max inSample size
if (imageHeight > 90 || imageWidth > 90) {
final int halfHeight = imageHeight / 2;
final int halfWidth = imageWidth / 2;
int inSampleSize = 1;
while ((halfHeight / inSampleSize) >= 90
&& (halfWidth / inSampleSize) >= 90) {
inSampleSize *= 2;
}
opt.inSampleSize = inSampleSize;
}
opt.inJustDecodeBounds = false;
Bitmap songImage = BitmapFactory.decodeByteArray(art, 0, art.length, opt);
baseSongList.get(i).setAlbumArt(songImage);
}
} catch (Exception e) {
Log.d("ddd", "exception in cover");
}
}
mHandler.obtainMessage(1).sendToTarget();
}
}).start();
答案 0 :(得分:0)
您可以使用recyclerView
,然后使用数据绑定适配器。这样,您可以避免一次加载所有歌曲,从而提高整体性能。为了获得更高的性能,您可以使用picasso之类的开源库。
希望这会有所帮助!