Есть ли смысл использовать AsyncTask для вызова метода в другом классе? - PullRequest
0 голосов
/ 16 марта 2020

Итак, мой код проходит через базу данных MediaStore для получения информации о mp3-файле.

Но мне было интересно, есть ли смысл вызывать мой метод build () который находится в другом классе внутри asyncTask в моей MainActivity ?

Есть ли разница между приведенным ниже кодом и простым вызовом library.getInstance().build(this); в моем методе onCreate () MainActivity

private static class buildLibrary extends AsyncTask<Void, Void, Void>{
        private WeakReference<Context> weakReference;
        private buildSongsLibrary(Context context){
            weakReference = new WeakReference<>(context);
        }
        @Override
        protected Void doInBackground(Void... voids) {
            try {
                // Retrieves all songs on the device.
                if (!library.getInstance().isLibraryInitialized()) {
                    library.getInstance().build(weakReference.get());
                }
            } catch (Exception e) {
            }
            return null;
        }

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

в другом классе

public void build(Context c) throws Exception {

    final Uri musicUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
    final Uri genreUri = MediaStore.Audio.Genres.EXTERNAL_CONTENT_URI;
    final Uri playlistUri = MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI;
    StorageUtil storageUtil = new StorageUtil(c);
    ContentResolver resolver = c.getContentResolver();
    Cursor cursor;

    String SONG_ID       = MediaStore.Audio.Media._ID;
    String SONG_TITLE    = MediaStore.Audio.Media.TITLE;
    String SONG_ARTIST   = MediaStore.Audio.Media.ARTIST;
    String SONG_ALBUMID  = MediaStore.Audio.Media.ALBUM_ID;
    String SONG_ALBUM    = MediaStore.Audio.Media.ALBUM;
    String GENRE_ID      = MediaStore.Audio.Genres._ID;
    String GENRE_NAME    = MediaStore.Audio.Genres.NAME;
    String SONG_FILEPATH = MediaStore.Audio.Media.DATA;
    String SONG_DURATION = MediaStore.Audio.Media.DURATION;
    String SONG_YEAR     = MediaStore.Audio.Media.YEAR;
    String SONG_ADDED    = MediaStore.Audio.Media.DATE_ADDED;
    String SONG_IS_MUSIC = MediaStore.Audio.Media.IS_MUSIC;

    cursor = resolver.query(musicUri, projection1, selection, null, null);
    try {
        if (cursor != null) {
            cursor.moveToFirst();
            while (!cursor.isAfterLast()) {

                Song song = new Song();
                song.setId(cursor.getLong(cursor.getColumnIndexOrThrow(SONG_ID)));
                song.setData(cursor.getString(cursor.getColumnIndexOrThrow(SONG_FILEPATH)));

                song.setTitle(cursor.getString(cursor.getColumnIndexOrThrow(SONG_TITLE)));
                song.setArtist(cursor.getString(cursor.getColumnIndexOrThrow(SONG_ARTIST)));
                song.setAlbumID(cursor.getLong(cursor.getColumnIndexOrThrow(SONG_ALBUMID)));
                song.setAlbum(cursor.getString(cursor.getColumnIndexOrThrow(SONG_ALBUM)));
                song.setDuration(cursor.getLong(cursor.getColumnIndexOrThrow(SONG_DURATION)));
                song.setYear(cursor.getInt(cursor.getColumnIndexOrThrow(SONG_YEAR)));
                song.setDateAdded(cursor.getInt(cursor.getColumnIndexOrThrow(SONG_ADDED)));
                String currentGenreID = songIdToGenreIdMap.get(Long.toString(song.getId()));
                String currentGenreName = genreIdToGenreNameMap.get(currentGenreID);
                song.setGenre(currentGenreName);

                songs.add(song);
                cursor.moveToNext();
            }
        }
    }catch (Exception e){
        // Exception caught because no songs were found.
        Log.e(TAG, "Exception caught because no songs were found!", e);
        throw new Exception();
    }finally {
        if (cursor != null ){
            cursor.close();
        }
    }
}
...