Использование CursorLoader:
(путем реализации LoaderManager.LoaderCallbacks<Cursor>
в вашем AppCompatActivity
)
private void loadPhotosFromPhone() {
getSupportLoaderManager().initLoader(0, null, this);
}
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
String[] projection = {MediaStore.Images.Media.DATA};
return new CursorLoader(this, MediaStore.Images.Media.EXTERNAL_CONTENT_URI, projection, null, null, null);
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
ArrayList<String> alstPhotos = new ArrayList<>();
for (data.moveToLast(); !data.isBeforeFirst(); data.moveToPrevious()){
String photoPath = data.getString(0);
alstPhotos.add(photoPath);
}
// Use alstPhotos
}
При этом все изображения на устройстве будут загружаться асинхронно.