Ich habe den folgenden Code Aber es dauert zu viel Zeit zu laden, aufgrund der manchmal App abstürzt. Wie mache ich das im Hintergrundprozess? Ich habe versucht, es mit AsyncTask zu tun, aber ich konnte den folgenden Code nicht einfügen. Beachten Sie, dass die aufgeblähte Ansicht "Ansicht" an diesem Teil des Codes zurückgegeben werden muss.Wie bekomme ich alle Audiodateien im Hintergrund (asynchron)?
View view = inflater.inflate(R.layout.activity_second, container, false);
ArrayList<Song> songList = new ArrayList<Song>();
final Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
final String[] cursor_cols = { MediaStore.Audio.Media._ID, MediaStore.Audio.Media.ARTIST, MediaStore.Audio.Media.ALBUM, MediaStore.Audio.Media.TITLE, MediaStore.Audio.Media.DATA, MediaStore.Audio.Media.ALBUM_ID, MediaStore.Audio.Media.DURATION };
final String where = MediaStore.Audio.Media.IS_MUSIC + "=1";
final Cursor cursor = view.getContext().getContentResolver().query(uri, cursor_cols, where, null, null);
while (cursor.moveToNext()) {
String artist = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ARTIST));
String album = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ALBUM));
String track = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.TITLE));
String data = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA));
Long albumId = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ALBUM_ID));
int duration = cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DURATION));
Uri sArtworkUri = Uri.parse("content://media/external/audio/albumart");
Uri albumArtUri = ContentUris.withAppendedId(sArtworkUri, albumId);
try {
MediaStore.Images.Media.getBitmap(view.getContext().getContentResolver(), albumArtUri);
} catch (FileNotFoundException exception) {
exception.printStackTrace();
albumArtUri = Uri.parse("Unknown");
} catch (IOException e) {
e.printStackTrace();
}
Collections.sort(songList, new Comparator<Song>() {
public int compare(Song a, Song b) {
return a.getTitle().compareTo(b.getTitle());
}
});
songList.add(new Song(albumId, track, artist, album, albumArtUri.toString()));
RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.recyclerView);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new GridLayoutManager(view.getContext(),2));
RecyclerViewAdapter recyclerViewAdapter = new RecyclerViewAdapter(view.getContext(), songList);
recyclerView.setAdapter(recyclerViewAdapter);
registerForContextMenu(recyclerView);
}
return view;
Es hat nicht geholfen, aber ich habe diese Verbesserung definitiv gemacht. Es gibt einen bestimmten Punkt, an dem ich herausgefunden habe, wo es abstürzt. Eigentlich habe ich diesen Code in onCreateView eines Fragments geschrieben. Ich benutze Tabs, wenn ich die Tabs ändere und zurückkehre, hängt die App und stürzt ab. –