RecyclerView занимает слишком много времени, чтобы загрузить песни - PullRequest
0 голосов
/ 28 мая 2018

Я пытаюсь запросить все песни на моем устройстве Android.В нем около 900 песен.Песни загружаются нормально, но для их просмотра в программе Recycleler требуется много времени.Чтобы показать все песни в программе recyclerView, требуется около 9-10 секунд.Код приведен ниже.Есть ли другой подход для реализации этого, поэтому время загрузки может быть уменьшено?

Код:

 private void queryForSongsInTheBg(final Uri uri, final String selection, final String[] whereVal){

    @SuppressLint("StaticFieldLeak") AsyncTask<Void,Void,Void> songManager = new AsyncTask<Void, Void, Void>() {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();

            getView().findViewById(R.id.querySongsProgressBar).setVisibility(View.VISIBLE);
        }

        @Override
        protected Void doInBackground(Void... voids) {

            String[] projection = {MediaStore.Audio.Media._ID,
                    MediaStore.Audio.Media.TITLE,
                    MediaStore.Audio.Media.ARTIST,
                    MediaStore.Audio.Media.ALBUM,
                    MediaStore.Audio.Media.DURATION,
                    MediaStore.Audio.Media.DATA,
                    MediaStore.Audio.Media.ALBUM_ID,
                    MediaStore.Audio.Media.DATE_ADDED,
                    MediaStore.Audio.Media.YEAR};

            Cursor cursor = getActivity().getContentResolver().query(uri, projection, selection, whereVal, null);
            if (cursor != null) {
                if (cursor.moveToFirst()) {
                    do {
                        long id = cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media._ID));
                        String name = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.TITLE));
                        String artist = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST));
                        String album = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM));
                        Long duration = cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media.DURATION));
                        String data = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA));
                        Long albumId = cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM_ID));
                        String date_added = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATE_ADDED));
                        Integer year = cursor.getInt(cursor.getColumnIndex(MediaStore.Audio.Media.YEAR));
                        String albumArtUri = String.valueOf(ContentUris.withAppendedId(Uri.parse("content://media/external/audio/albumart"), albumId));
                        checkAlbumArt = getCoverArtPath(albumId);
                        if (checkAlbumArt == null || checkAlbumArt.isEmpty())
                            albumArtUri = getAlbumArtFromInternet(artist, name);

                        SongInfoModel s = new SongInfoModel(id, name, artist, date_added, album, year, duration, data, albumId, albumArtUri);
                        SongList.add(s);


                    } while (cursor.moveToNext());
                }


                cursor.close();

            }






            return null;
        }

        @Override
        protected void onPostExecute(Void aVoid) {
            super.onPostExecute(aVoid);

            getView().findViewById(R.id.querySongsProgressBar).setVisibility(View.GONE);
            songAdapter = new SongAdapter(getContext(), SongList, listener);
            recyclerView.setAdapter(songAdapter);
        }
    };

    songManager.execute();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...