Android 8.1 失去响应

Android 8.1 lost responsiveness

当我从 android 7 升级到 8.1 后启动我的应用程序时,我注意到它失去了很多响应能力。

当我尝试从设备内存中获取歌曲时,我遇到了很多错误,例如:

E/SEC_DRM_PLUGIN_Omafl: OmaPlugin::onOpenDecryptSession(fd)::Drm2IsDrmFileByExtFd::file is NOT DRM by extension

这比 Android 7.

慢得多

代码:

public ArrayList<Song> getSongList() {
    MediaMetadataRetriever metaRetriver = new MediaMetadataRetriever();
    String selection = MediaStore.Audio.Media.IS_MUSIC + " != 0";
    ArrayList<Song> songList = new ArrayList<>();
    ContentResolver musicResolver = context.getContentResolver();
    Uri musicUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
    Cursor musicCursor = musicResolver.query(musicUri, null, selection, null, null);

    if (musicCursor != null && musicCursor.moveToFirst()) {
        int titleColumn = musicCursor.getColumnIndex(MediaStore.Audio.Media.TITLE);
        int idColumn = musicCursor.getColumnIndex(MediaStore.Audio.Media._ID);
        int artistColumn = musicCursor.getColumnIndex(MediaStore.Audio.Media.ARTIST);
        int durationColumn = musicCursor.getColumnIndex(MediaStore.Audio.Media.DURATION);
        int column_index = musicCursor.getColumnIndex(MediaStore.Audio.Media.DATA);

        do {
            long id = musicCursor.getLong(idColumn);
            String path = musicCursor.getString(column_index);
            String title = musicCursor.getString(titleColumn);
            String artist = musicCursor.getString(artistColumn);
            String duration = musicCursor.getString(durationColumn);

            try {
                metaRetriver.setDataSource(path);
                songList.add(new Song(id, title, artist, path, duration));
            }catch (Exception exc){}

        } while (musicCursor.moveToNext());
    }
    return songList;
}

我不得不删除在尝试从内存中获取每一首歌曲时导致错误的一行代码:

mediaMetadataRetriver.setDataSource(pathOfSong);

希望对您有所帮助。