@kotlin_lang

Страница 288 из 982
Artur
21.08.2017
13:21:17
на практике такие заморочки с оптимизацией не нужны, просто один конкретный кейс попался. Когда загрузка занимала 240 секунд)

теперь 15с, жить можно)

Sergey
21.08.2017
13:21:40
11к элементов это не мало

а что там так много отправляется?

Google
Artur
21.08.2017
13:22:29
товары из сети, предв. обработка, запись в БД

Sergey
21.08.2017
13:22:55
а памяти в хипе сколько выделено?

Boris
21.08.2017
13:24:03
Мм, так как ни бей, запись в бд замки на порядок больше

Займет

Artur
21.08.2017
13:24:22
да

кроме этой оптимизации еще и саму запись в БД оптимизировали, пришлось raw SQL в обход ORM делать

а памяти в хипе сколько выделено?
Android, точно не замерял)

Sergey
21.08.2017
13:25:42
а.. а то на бекенде обрабатывать по 11к как-то накладно)

Artur
21.08.2017
13:27:02
есть нюансы)

Boris
21.08.2017
13:32:49
разбить 11к элементов на куски занимает ~200мс на моем компе, думаю, никакого значения что ты будешь для этого использовать не имеет

Igor
21.08.2017
14:11:10
JMH?
Это кажется вообще Android

Google
Denis
21.08.2017
14:11:31
Это кажется вообще Android
Да пофиг, алгоритмы через jmh гонять и на компе можно

Понятное дело что арт/далвик исказят немного, но это будет уже проблема чисто андроида

Михаил
21.08.2017
19:05:05
встал такой кейс с корутинами. а как мокать suspend функции?)

Quantum Harmonizer
21.08.2017
19:05:59
дежавю :)

Михаил
21.08.2017
19:06:19
?)

Quantum Harmonizer
21.08.2017
19:06:55
Я не подскажу, по какой фразе искать, но такой вопрос уже вставал раза три, в т. ч. в ближайшие пару дней.

Михаил
21.08.2017
19:07:50
чет не припомню. вроде регулярно почитываю чатик)

Quantum Harmonizer
21.08.2017
19:10:30
(сам не читал)

https://medium.com/@tonyowen/android-kotlin-coroutines-unit-test-16e984ba35b4

Михаил
21.08.2017
19:18:53
https://medium.com/@tonyowen/android-kotlin-coroutines-unit-test-16e984ba35b4
именно по этому кейсу там нет рецепта

Konstantine
21.08.2017
21:34:02
Эх, а у object-классов никак нельзя конструктор реализовать? Прям в печаль ввело.

Михаил
21.08.2017
21:36:15
init {}

Va
21.08.2017
21:36:24
init на что ?)

Konstantine
21.08.2017
21:36:50
Мне туда надо передать Context. Чем тут init поможет?

Va
21.08.2017
21:37:18
так пиши свой кастомный метод

и хранить контекст в статических классах — плохая идея

Quantum Harmonizer
21.08.2017
21:38:09
Эх, а у object-классов никак нельзя конструктор реализовать? Прям в печаль ввело.
Есть object expressions, а есть object declarations, оба являются видами классов. :)

Konstantine
21.08.2017
21:38:25
Quantum Harmonizer
21.08.2017
21:38:37
Мне туда надо передать Context. Чем тут init поможет?
Если объекту нужны параметры, значит, он не должен быть синглтоном.

Google
Quantum Harmonizer
21.08.2017
21:38:56
и хранить контекст в статических классах — плохая идея
Кстати, почему? Код фреймворка так делает. (я не про контекст Activity, конечно)

Спорное утверждение)
Какой нужен контекст?

Konstantine
21.08.2017
21:39:43
Какой нужен контекст?
Любой который имеет доступ к шаредпреференсам)

Va
21.08.2017
21:39:50
потому что это потенциальная утечка памяти контекст — очень непонятная и сложная штука ) >Код фреймворка так делает например, какой?

Konstantine
21.08.2017
21:39:51
так что хоть приложения самого)

Quantum Harmonizer
21.08.2017
21:40:23
Любой который имеет доступ к шаредпреференсам)
Тогда можно инициализировать работу с префами в классе приложения. By the way, есть Kotpref, и он хранит контекст статически :)

Konstantine
21.08.2017
21:41:31
Тогда можно инициализировать работу с префами в классе приложения. By the way, есть Kotpref, и он хранит контекст статически :)
У меня класс для работы с данными, тупо репозиторий, он должен работать с преферанцами, логично что нужен синглтон, но без контекста там никак.

Konstantine
21.08.2017
21:43:37
Нет, не логично. Ты можешь захотеть подменить его для тестирования.
Он происходит от интерфейса, подменить его не проблема.

Va
21.08.2017
21:43:44
тут вопрос в том, что если вы храните у себя контекст какого-то не того уровня (например, активити), оно может не умирать и висеть в памяти. а т.к. applicationContext и Activity это Context, то очень легко ошибиться я, например, от синглтонов отказался, в роли оных выступает обычно сингл-инстанс класс в графе

ты можешь инициировать свой менеджер сразу префсами

Konstantine
21.08.2017
21:45:25
Суть сейчас не в том чем инициировать, а в том, что банальной возможности сразу нет этого сделать, т.к. конструкторам сказали досвидос в object'ах. :(

Это надо какой-то initIt() делать и там все делать, не забывая вызывать его где-то

Va
21.08.2017
21:45:46


Konstantine
21.08.2017
21:46:31
Вот о чем и говорю, делать отдельную инициализацию придется

Va
21.08.2017
21:47:00
ну да, потому что они там не нужны )) вы руками никогда и нигде не вызовете его если бы можно было вызывать конструктор — значит, что это не объект, потому что в какой-то момент времени он может не иметь инстанса

можно было бы как-то сахарно встроить инициализацию объекта

Konstantine
21.08.2017
21:48:42
Это было бы банально как и эта инициализация руками, просто предусмотренная языком. Вместо Kotpref.init(context) можно было бы вызвать Kotpref(context) и все. Одно и тоже, но смотрится то секазнее. Имхо)

А что, кстати, за internal var?

Google
Va
21.08.2017
21:49:34
package-private

Konstantine
21.08.2017
21:49:53
Ох е)

Konstantine
21.08.2017
22:01:04
Так что это за синглтон, если вы в любой момент через конструктор можете создать себе еще инстансов?
Из моего описания ясно, что в данном случае конструктор выступал бы тупо в роли инициализации.

Андрей
21.08.2017
22:01:10
package-private
package-private в котлине нету. internal - это видимость на уровне модуля.

Konstantine
21.08.2017
22:01:13
Это было бы банально как и эта инициализация руками, просто предусмотренная языком. Вместо Kotpref.init(context) можно было бы вызвать Kotpref(context) и все. Одно и тоже, но смотрится то секазнее. Имхо)

Va
21.08.2017
22:02:14
module-private тогда, вернее, справедливо

Quantum Harmonizer
21.08.2017
22:20:02
Konstantine
21.08.2017
22:20:37
А если такое выражение выполнить несколько раз? С разными аргументами. Не должен быть такой класс синглтоном.
Поменять или обновить его? С init'ом точно такая же ситуация, просто вид другой)

Quantum Harmonizer
21.08.2017
22:21:10
Поменять или обновить его? С init'ом точно такая же ситуация, просто вид другой)
init — это явный костыль. Таких вещей на уровне языка быть не должно.

Konstantine
21.08.2017
22:21:13
А какого-то правила, что синглтон не должен получать и хранить данные - глупость какая-то) Синглтон главное чтобы был один, а там уже что надо пусть то и делает.

Konstantine
21.08.2017
22:22:18
А если нужны два инстанса с разными данными?
То это уже какой-то и не синглтон)

Quantum Harmonizer
21.08.2017
22:22:38
То это уже какой-то и не синглтон)
Потому что синглтон не должен получать данные!

Он должен быть независимым.

Konstantine
21.08.2017
22:23:22
С чего это?

Quantum Harmonizer
21.08.2017
22:23:28
Нормальные синглтоны получаются из чистых функциональных объектов.

Konstantine
21.08.2017
22:23:35
Он должен быть один, про независимость это уже ваши какие-то правила)

Quantum Harmonizer
21.08.2017
22:24:06
С чего это?
Потому что если он получает какие-то зависимости, кому-нибудь могут понадобиться разные экземпляры.

Google
Konstantine
21.08.2017
22:24:25
Тогда уже по определению человек не так мыслит

Ему значит нужен не синглетон

Quantum Harmonizer
21.08.2017
22:24:42
Konstantine
21.08.2017
22:24:44
Раз несколько экземпляров.

нет, это у вас тупо клин архитекчюр головного мозга, а так синглтон не о том)

Quantum Harmonizer
21.08.2017
22:25:44
Konstantine
21.08.2017
22:25:58
Суть та же - убрать зависимости)

Quantum Harmonizer
21.08.2017
22:26:33
То, что есть контекст приложения, который повсеместно нужен — не нормальная данность, а косяк Андроида.

Konstantine
21.08.2017
22:26:56
Это факт)

Quantum Harmonizer
21.08.2017
22:27:02
Суть та же - убрать зависимости)
Ага, сделать зависимости неявными и стрелять себе в ноги.

Konstantine
21.08.2017
22:27:49
Но от того, что андроид был изначально спроектирован через жопу - я не собираюсь отказыаться от синглов, который часто спасают) Да, это не лучший путь делать его зависимым - но от него никуда не деться)

Quantum Harmonizer
21.08.2017
22:28:46
Держать их в Application. Они будут effectively-синглтонами, но без костылей.

Konstantine
21.08.2017
22:29:24
Как-то мне это кажется еще более зависимым, хах)

Boris
22.08.2017
04:22:32
Про синглтон совсем недавно статья на Хабре была, в целом более менее толковая

Там конечно срача в комментах развели

А что касается андроида, то он сделан не удачно в этом смысле, синглтон для апликейшна так и просится. Но вроде можно обойтись если Даггер прикрутить

MainDRY
22.08.2017
06:41:38


кто знает как решить?

Страница 288 из 982