Iuriich
короче я понял, буду использовать handler
Mike
короче, для твоей задачи должен подойти JobScheduler
Anonymous
у кого может есть реализация кейса,для поулчения у ресайкла элемента ,который по середине на экране?
Anonymous
время
Дмитрий
короче, для твоей задачи должен подойти JobScheduler
вот, кстати, написал я JobScheduler, а на некоторых телефонах он нифига не работает. надо каждый час на сервере проверять инфу по http. MIUI на базе андроид 5.1 и андроид 6 нифига не работают. если раз в сутки запросит, то норм
Sergey
OnScroll отдает 3 параметра, сколько всего элементов, номер первого видимого и сколько видно на экране.
Anonymous
частично иинтересуют
Daniil
+++ или да.... с drawables- проблемы (с ресурсами в общем)
Не дойдя до лоадеров в книжке, пока остановился на том, что в пуле потоков параллельно инициализирую асинктаски на загрузку картинок. Все потокобезопасно. Загружаются все вместе мгновенно, теперь непонятно как этого монстра остановить )
Roman
Всем привет! Кто-нибудь реализовывал или знает как сделать стрелку для табов на мобилке? https://storage.googleapis.com/material-design/publish/material_v_12/assets/0B6Okdz75tqQsdWNWZFEzRmdWSkk/components-tabs-usage-desktop5.png
Лёша
Всем привет! Кто-нибудь реализовывал или знает как сделать стрелку для табов на мобилке? https://storage.googleapis.com/material-design/publish/material_v_12/assets/0B6Okdz75tqQsdWNWZFEzRmdWSkk/components-tabs-usage-desktop5.png
оч странный кейс) я бы засунул таб лайаут и кнопку в один линеар лаяут и по клику скролил бы табы хм, не углядел, что это десктоп, тогда норм
••●
Vlad
На рапиду бабки пришли с адмоба. Кинули на конверсии посчитали по курсу 21го числа
Sergey Mitrofanov
Возник интересный вопрос: А есть ли в жава метода немедленного автоматического обнуления объекта, если на него не осталось ссылок? Слабая ссылка не катит, потому что в ней объект живет, пока его ГЦ не соберет. Но его живучесть еще не означает, что он на самом деле используется. Я помню, в Пикассо используется какая-то техника на блокировке потока. Она такова, что если ты не сохранишь ссылку на Target, то 100% он внутри будет null сразу после выхода из метода. И то же самое будет, как только ты свою ссылку на таргет обнулишь, и других ссылок не останется - он сразу «инавлидируется» обнулением. Я в свое время не осилил механику той техники, а сейчас найти не могу, где именно это было? Может кто знает иную технику или про эту может на пальцах раскидать? Или, может, есть метода учета ссылок на объект?
Sergey Mitrofanov
Да, задача такая - ленивое создание сущности, и обнуление её ссылки в кеше, как только последний использовавший обнулил свою ссылку на неё. Эдакий кастомный скоуп )
Sergey
Возник интересный вопрос: А есть ли в жава метода немедленного автоматического обнуления объекта, если на него не осталось ссылок? Слабая ссылка не катит, потому что в ней объект живет, пока его ГЦ не соберет. Но его живучесть еще не означает, что он на самом деле используется. Я помню, в Пикассо используется какая-то техника на блокировке потока. Она такова, что если ты не сохранишь ссылку на Target, то 100% он внутри будет null сразу после выхода из метода. И то же самое будет, как только ты свою ссылку на таргет обнулишь, и других ссылок не останется - он сразу «инавлидируется» обнулением. Я в свое время не осилил механику той техники, а сейчас найти не могу, где именно это было? Может кто знает иную технику или про эту может на пальцах раскидать? Или, может, есть метода учета ссылок на объект?
Наверно у меня не хватает знаний, но как только ты все ссылки потерял, тебе уже плевать где объект и когда им займется gc
Sergey
там есть слабая ссылка
Те если нет стронгов, то все равно есть слабая даже если не создавал?
Sergey
нет, именно Picasso держит Target слабой ссылкой
А ну с Пикассо понятно зачем он держит soft
Mike
weak
Sergey Mitrofanov
Наверно у меня не хватает знаний, но как только ты все ссылки потерял, тебе уже плевать где объект и когда им займется gc
Вот есть кэш, в котором лежит ссылка на объект, и выдает его запрашивающим: если он нулл, то создает, если нет, то выдает. Так вот задача в том, чтобы обнулять этот объект сразу же, как только все запросившие перестали его использовать (деинициализировались по ЖЦ). Чтобы следующий вопрошающий получил уже новый объект с актуальным состоянием, а не старый.
Sergey
weak
Окей, я думал кжш в памяти и а софтах лелают
Mike
Окей, я думал кжш в памяти и а софтах лелают
я про таргеты в пикассо) окей, не суть
Alexey
Возник интересный вопрос: А есть ли в жава метода немедленного автоматического обнуления объекта, если на него не осталось ссылок? Слабая ссылка не катит, потому что в ней объект живет, пока его ГЦ не соберет. Но его живучесть еще не означает, что он на самом деле используется. Я помню, в Пикассо используется какая-то техника на блокировке потока. Она такова, что если ты не сохранишь ссылку на Target, то 100% он внутри будет null сразу после выхода из метода. И то же самое будет, как только ты свою ссылку на таргет обнулишь, и других ссылок не останется - он сразу «инавлидируется» обнулением. Я в свое время не осилил механику той техники, а сейчас найти не могу, где именно это было? Может кто знает иную технику или про эту может на пальцах раскидать? Или, может, есть метода учета ссылок на объект?
В пикассо такая шняга: private static class CleanupThread extends Thread { private final ReferenceQueue<Object> referenceQueue; private final Handler handler; CleanupThread(ReferenceQueue<Object> referenceQueue, Handler handler) { this.referenceQueue = referenceQueue; this.handler = handler; setDaemon(true); setName(THREAD_PREFIX + "refQueue"); } @Override public void run() { Process.setThreadPriority(THREAD_PRIORITY_BACKGROUND); while (true) { try { // Prior to Android 5.0, even when there is no local variable, the result from // remove() & obtainMessage() is kept as a stack local variable. // We're forcing this reference to be cleared and replaced by looping every second // when there is nothing to do. // This behavior has been tested and reproduced with heap dumps. RequestWeakReference<?> remove = (RequestWeakReference<?>) referenceQueue.remove(THREAD_LEAK_CLEANING_MS); Message message = handler.obtainMessage(); if (remove != null) { message.what = REQUEST_GCED; message.obj = remove.action; handler.sendMessage(message); } else { message.recycle(); } } catch (InterruptedException e) { break; } catch (final Exception e) { handler.post(new Runnable() { @Override public void run() { throw new RuntimeException(e); } }); break; } } } void shutdown() { interrupt(); } }
Sergey Mitrofanov
нет, именно Picasso держит Target слабой ссылкой
пруф будет? Я лично когда тестировал в бою замечал, что weak живет до 5-ти минут, пока его GC не собрал, а Таргет теряется моментально, если ты на него ссылку не сохранил (доли секунд ответа из сети, и NPE по таргету) И копаясь в недрах пикассо я там не находил weak, а только какую-то магию с блокировкой потока на объекте (не таргет вроде)
Alexey
В конструктор потока передается ReferenceQueue, при каждом создании Target помещается в эту очередь, как только ссылка на таргет исчезает - поток отменяет действие
Alexey
https://docs.oracle.com/javase/7/docs/api/java/lang/ref/ReferenceQueue.html#remove()
Sergey Mitrofanov
Alexey вот спасибо! Осталось грокнуть это )
Alexey
https://github.com/square/picasso/blob/master/picasso/src/main/java/com/squareup/picasso3/Action.java Да, действие у них - слабая ссылка
Alexey
а, нет, обосрался)
Alexey
таргет, все правильно
Alexey
почему?)
Я начал вспоминать и подумалось что они Action слабой ссылкой делают, потом посмотрел в исходники и оказалось Target, все правильно)
Mike
А вот тут подробнее можно? )
Создаётся фантомная или слабая ссылка. В конструктор передаётся ReferenceQueue. Потом из этой очереди можно будет получать ссылки на объекты, которые стали недостижимыми, и делать какие-то предсмертные действия.
Mike
А есть пример кода? А то на словах не могу однозначно вкурить )
val queue = ReferenceQueue() ... PhantomReference(someObject, queue) ... while (true) { val reference = queue.remove() ... }
Mike
можно экстендить PhantomReference и добавлять туда своих данных
Sergey Mitrofanov
@Harmonizr спасибо! Думал, там еще какая магия есть =) А weak здесь покатит?
Mike
@Harmonizr спасибо! Думал, там еще какая магия есть =) А weak здесь покатит?
У weak есть подходящий конструктор, должно работать. Но я не проверял, а примеры видел только в phantom.
Sergey Mitrofanov
ok
Anna
ребята, довольно тупой вопрос, но что-то в рабочую субботу никак не могу сообразить... у меня есть recycler view у каждого item есть одно поле EditText and 2 spinners. Пользователь может интерактивно добавлять и удалять блоки айтемов. по кнопке на интерфейсе нужно забрать актуальные данные с этого списка. я не пойму как нормально это сделать и какие вообще есть варианты %)
Anna
спасибо!
Anna
а если использовать посто тот же список, который вкидывается в адаптер по ссылке. так тоже работает. такая архитектура чем-то чревата? выглядит проще
Kanstantsin
а если использовать посто тот же список, который вкидывается в адаптер по ссылке. так тоже работает. такая архитектура чем-то чревата? выглядит проще
ну вам всё равно его отфилтровать придется же(выбрать те которые чекнуты, например) и убирать из существующего списка, и обновлять адаптер
Kanstantsin
по сути да один и тот же список нужно использовать, тот который в адаптере, чтобы при обновлении он понимал что список изменился и обновлял UI
Kanstantsin
делаете startActivityForResult ?
Kanstantsin
и ловить вроде надо резалт в специальном методе на первой активити
Kanstantsin
как я помню
Kanstantsin
http://startandroid.ru/ru/uroki/vse-uroki-spiskom/69-urok-30-podrobnee-pro-onactivityresult-zachem-nuzhny-requestcode-i-resultcode.html как вариант onActivityResult() нужно переопределить
Kanstantsin
там ожидать ответ в активити A
Kanstantsin
список обновляется сразу в адаптере. там стоят change listeners. фильтровать не нужно
ну да, это я что-то додумал уже )) просто сделать методы у адаптера добавления элемента/ов и удаления элемента/ов и их дергать, в них удалить или доавблять айтемы в коллекцию
Kanstantsin
и не забывать дергать adapter.notifyDataSetChanged() или ещё красивые калбэки есть у Recycler анимированные
Kanstantsin
а в чем конкретней вопрос ещё )
Anna
ну да, это я что-то додумал уже )) просто сделать методы у адаптера добавления элемента/ов и удаления элемента/ов и их дергать, в них удалить или доавблять айтемы в коллекцию
так сейчас и работает. просто у меня почему-то в голове не вмещается, что список один и для фрагмента и для адаптера...
Kanstantsin
а зачем вам список у фрагмента ?
Kanstantsin
отдавайте его в адаптер, и например получайте оттуда
Anna
а зачем вам список у фрагмента ?
на фрагменте я беру этот список и сохраняю в преференсы. это пользовательские настройки. собственно вопроса нет уже, работает нормально. просто обычно я использовала функцию внутри адаптера и интерфейс. во фрагменте или активити её вызывала. а теперь оказывается есть и такой подход...
Kanstantsin
Поэтому я бы делал методы получения списка у адаптера и сохранял
Anonymous
[ не к предыдущей теме] привет всем, кто читает. Может где-то у кого-то в закладках есть пример работы Camera api (или Camera2) положенный на архитектуры MVVM и MVP? Гугл особых результатов не дал, но кто-то точно такое делал
Anonymous
отдельно камера, отдельно архитектура
а есть где-то отдельно камера? (не уровня гугловских сэмплов- там совсем все плохо) (кстати - ты тут живешь?)
Anonymous
отдельно от чего?
Да просто пример толковой работы с Camera2
Mike
Да просто пример толковой работы с Camera2
Этого не знаю. Но смешивать камеру и presentation-layer-архитектуру не вижу смысла.
Anonymous
Этого не знаю. Но смешивать камеру и presentation-layer-архитектуру не вижу смысла.
но 1000 строк кода в активити, то же ж не айс. А даже в камере можно сделать кнопочки, настройки и другое в View слое
Sergey
У weak есть подходящий конструктор, должно работать. Но я не проверял, а примеры видел только в phantom.
если очередь фантомов не поллить, то объекты не будут собраны, это главное отличие его от soft/ weak
roman G
Ребят, есть бд с 6+ таблицами (на 20-30 столбцов) Мне нужно для каждой таблице сделать вывод на экран всех записей Как это сделать с точки зрения работы с data слоем