Skip to content

Conversation

@guliash
Copy link

@guliash guliash commented Jul 25, 2016

  1. Для первого задания был использован Executor. Один Executor оборачивает Handler, для возврата результата на главный поток. Второй есть ThreadPoolExecutor для многопотчной загрузки изображений.
    Ссылки на изображения и колбеки хранятся в WeakReference.
    Добавлен механизм subscribe/unsubscribe для возможности отписки от получения результата.
    Реализован LRUCache для изображений.
    Для загрузки списка исполнителей использован AsyncTask.
  2. Для второго задания использовались два Handler'а. Первый для занесения тасков в очередь main потока. Второй для возможности использования delayed тасков (запихиваем таск в этот handler, по истечение времени, постим его в очередь тасков, которая уже будет обрабатываться через первый Handler)

Для демонстрации фич был создан RecyclerView со списком жанров. При скролле изображения подгружаются и компонуются в коллаж через CollageLoader (изображения никаким образом в адаптере не кешируются, интереса ради). Если для холдера onBindViewHolder был вызван дважды во время скролла, то старая подписка отменится. Во время скролла в главном потоке критическая секция, поэтому изображения не будут выставлены, до тех пор пока происходит скролл. Когда палец будет убран, то изображения будут выставлены.

Для внедрения зависимостей использован Dagger2.

Проблемы:

  • После скролла бывает так, что в imageView дважды быстро вставляются разные изображения. В конце концов гарантированно будет нужное изображение. Но всё равно баг неприятный. Пока без понятия как хорошо пофиксить. Поэтому коммит скорее всего не последний:)

Пример:

background

Жду обратной связи:)

/**
* The executor to post result back on UI thread
*/
@NonNull private Executor mPostExecutor;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Почему ты не в некоторых местах аннотируешь все ноннулами, а в некоторых нет?
Если уж все так серьезно, то можно и final проставить)

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Это желание везде ставить аннотации приходит волнами:-) Надо больше дисциплины.

@guliash
Copy link
Author

guliash commented Jul 31, 2016

Улучшил CollageLoader - теперь в адаптере не надо управлять подписками (loader сам отменяет, если видит что пришёл ещё один запрос).

aleien added a commit to aleien/background that referenced this pull request Jul 31, 2016
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants