线程性能建议

时间:2018-07-10 17:30:34

标签: java android multithreading

我正在制作音乐播放器,后来到了要为每首歌曲加载艺术封面的地步。目前,我的手机上有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();

1 个答案:

答案 0 :(得分:0)

您可以使用recyclerView,然后使用数据绑定适配器。这样,您可以避免一次加载所有歌曲,从而提高整体性能。为了获得更高的性能,您可以使用picasso之类的开源库。

希望这会有所帮助!