Ответ на этот вопрос изменился в C ++ 17.
Оценка перегруженных операторов теперь упорядочена так же, как и для встроенных операторов (C ++ 17 [over.match.oper ] / 2).
Кроме того, теперь <<
, >>
и операторы подписи теперь имеют левый операнд , упорядоченный до справа, а постфиксное выражение вызова функции - упорядочивается до оценки аргументов.
(Другие бинарные операторы сохраняют свое предыдущее упорядочение, например +
по-прежнему не подвержены последовательности).
Итак, код в вопросе должен теперь выводить Value of test is : 0 Return value of function is : 1 Value of test : 1
. Но совет «Не делай этого» по-прежнему разумен, учитывая, что для обновления до C ++ 17 потребуется некоторое время.
Клавиша объясняется в примере List13.java
В основном вам нужно отслеживать состояние прокрутки вашего listView и уведомлять адаптер, когда он будет готов сделать что-то медленное с только видимым Предметы.
Также обратите внимание, что сохранение изображений на диск - очень медленный процесс. Используя состояние кеш-памяти на основе памяти значительно улучшит вашу производительность заявление.
Я вижу, как вы декодируете изображение и сжимаете его обратно на диск, а затем снова декодируете. Думаю, не очень эффективно. Вы можете просто сохранить поток из сети на диск, а затем распаковать его. Это было бы всего одно распаковывание вместо трех сжатий / распаковок. Вы сэкономите много времени процессора.
Я думаю, что AsyncTask создает несколько потоков для нескольких изображений. Таким образом, несколько изображений сжимаются / распаковываются одновременно, несколько потоков борются за процессорное время, что не очень хорошо. Насколько я знаю, AsyncTask использует пул потоков, поэтому он не запускает новый поток для каждого изображения. Но все равно несколько потоков одновременно - это не очень хорошо. Я согласен, что очередь была бы намного эффективнее. Реализацию не так уж и сложно создать самостоятельно. Я использую свою собственную реализацию очереди, и меня она вполне устраивает.
Если у вас есть собственный поток, я думаю, можно было бы дать ему более низкий приоритет. Это сделает пользовательский интерфейс более отзывчивым.
Вам определенно понадобится какой-то кеш в памяти, иначе пользовательский интерфейс не будет достаточно быстрым. Распаковка идет медленно. Вы можете хранить не все изображения, а только наиболее часто используемые. Вы можете использовать SoftReference для реализации кеширования. Вы можете использовать опцию inSampleSize, чтобы уменьшить размер ваших растровых изображений и занимать меньше памяти Странная проблема нехватки памяти при загрузке изображения в объект Bitmap .
Я сделал полный пример LazyList и опубликовал исходный код, также может быть полезно Ленивая загрузка изображений в ListView .