P҉h҉o҉e҉n҉i҉x҉
StateListAnimator почитай
Вроде он как то по другому реализовался, но все равно спасибо, использую эту если будет работать так как мне нужно.
Павел
dependencies {
classpath "io.realm:realm-gradle-plugin:5.13.0"
classpath 'com.android.tools.build:gradle:3.4.2'
classpath 'io.realm:realm-gradle-plugin:3.5.0'
classpath 'com.github.dcendents:android-maven-gradle-plugin:1.3'
classpath "io.realm:realm-gradle-plugin:1.0.1"
}
Vadim
почему может leakовать такая конструкция?
override fun onStart() {
super.onStart()
vm.state.items.subscribe {
someListViewAdapter.submitList(it)
}.untilStopped()
}
Vadim
если быстро переключаться между экранами, при этом если вместо submitList(it) создавать новый адаптер, присваивать его recyclerview и потом отправлять туда список, то всё ок
Kost
А что делает submitList ?
Сергій
А как понял что течёт
Kost
Там clear есть? Я его не юзал особо
Vadim
в итоге вышло так, что если создавать новый адаптер на каждый эммит observable то мемори лик пропадает
Vadim
У меня еще этот список находится во фрагменте, который в tablayout’e
Kost
Попробуй вместо obaervable заюзать flowable
Kost
А у тебя во Вью модели объект, который храни список Лив дат?
Kost
Подписка на flowable, а эмитит behavprocessor?
Kost
Backpreassurestrategy стоит буффер?
Vega
гайз, есть задача открыть пдф файл по ссылке. Погуглил, есть несколько вариантов: открыть в гугл док через веб вью, скачать локально и открыть чем-то на телефоне и отправить ссылку в браузер, оно там скачается и потом чем-нибудь открыть.
Первые 2 варианты стремные, понравился второй, но там после перехода в браузер и нажатии кнопки назад не возвращаюсь в приложение.
Кто какие вартианты юзает дял этого вообще? Как правильнее делать? Мб есть бест практис?
tRuNKator
Должно сохраняться позиция скрола при указании id вьюхе
Ruslan
Almas
Almas
В real time сделать дамп
Kost
Vega
Aleksandr
Aleksandr
но сама либа довольно простая в использовании
Starikov
как поймать исключение из viewModelScope.launch{}
?
Vega
блин, чет реально для отображения в веб вьюшке пдфки нет ничего из корокби. Наверное остановлюс на интенте в браузер
Vadim
Starikov
так сделал. не помогает
Vadim
при этом
override fun onStart() {
super.onStart()
vm.state.items.subscribe {
binding().rv.adapter = ListAdapter().apply {
submitList(it)
}
}.untilStopped()
}
работает без memory leaka
Vadim
ватафака 😄
Starikov
исключение не ловится, приложение падает
Starikov
try {
this@ProfileActivity.viewModel.saveStudent()
} catch (e: Exception) {
Toast.makeText(this@ProfileActivity, e.message, Toast.LENGTH_SHORT).show()
}
viModel:
try {
viewModelScope.launch(handler) {
val student = Student(
name.value!!,
surname.value!!,
patronymic.value!!,
university.value!!,
emailOrPhone.value!!,
-1
)
runBlocking(handler) {
repository.saveStudent(student)
}
}
} catch (e: Exception) {
throw e
}
Ivan
Ivan
throw e зачем?
Starikov
когда исключение вылетает, тост не показывает, а крашит приложение
Kost
Погоди, у тебя внутри ресайклер Вью констра?
Starikov
throw e зачем?
и без него было, я уже просто везде где можно пихать try стал
Vadim
Vadim
viewholderы все с constraintlayout’ом
Kost
Вот изза этого м может ликовать
Kost
Каждый раз для элемента перерасчёт местоположенич
Kost
Попробуй сделать через линеар или рэлейтив
Vadim
Vadim
ну и как бы у меня список не меняется соответсвенно перерисовки нету т.к. это listadapter
Vadim
перенес создание адаптера из onCreate в onCreateView - лика тоже нету
Vadim
выходит что каждый раз нужно адаптер создавать, иначе список сэтится в какой-то старый инстанс
Vadim
и он не может принять смерть достойно
Сергій
какая-то хрень )
Сергій
у тебя что-то где-то не чисто
Alex Android
Лул, можно запросить пермишн через шелл и юзер ничего не заметит
Сергій
Александр
Вопрос по интегарционным тестам.
В @Before я ручками инициализирую ретрофитовские классы, чтобы получить реальные данные с сервера и работать дальше с ними.
Правильнее ли будет замокать ретрофитовские классы и возвращать захардкоженные данные при обращении к ним?
Кода блин дофига получается с ручной инициализацией, а дотянуть даггер не получается, сложна.
Alex Android
Олег
ты хочешь тестировать интеграцию классов или то, насколько стабильно работает сеть/бэк?
Starikov
падает на самом первом exception из repository. там идет throw чтобы выше передать , но catch выше не славливает
Denis
Denis
сразу поймешь, почему твой способ не работает
Сергій
проветить профайлером, вызвать gc и потом сделать дамп
Александр
Да, вполне
Смущает малясь что респонс захардкоженный, если поменяется апи - тест перестанет быть валидным.
Alex Android
Создавай по модели и конверти в жсон
Alex Android
Ну или как там у тебя. При изменении модели сразу будут ошибки компиляции в тесте
Alex Android
Тесты меняются под задачу. Задача изменилась - меняются и тесты
Starikov
Спасибо, Оганнес
Starikov
хорошо, прочту
Starikov
можно тогда еще спросить? как замерить время выполнения корутины? пробовал с runBlocking{} но не знаю верно ли
Starikov
а если она в IO запускается? я считаю время выполнения запроса на сервер и сохранения в бд
Starikov
ок, еще раз спасибо)
Starikov
так сработает?
val startTime = System.currentTimeMillis()
Log.d("TIME", "startTime = $startTime")
runBlocking {
sendResultToServer(it)
}
val middleTime = System.currentTimeMillis()
Log.d("TIME", "middleTime = $middleTime, clock0 = ${middleTime - startTime}")
runBlocking {
saveResultToDatabase()
}
val endTime = System.currentTimeMillis()
Log.d("TIME", "endTime = $endTime, clock1 = ${endTime - middleTime}")
Log.d("TIME", "clock2 = ${endTime - startTime}")
saveResult() - это обе suspend функции которые выполняются в withContext(IO)
?
Denis
Denis
Александр
Тесты меняются под задачу. Задача изменилась - меняются и тесты
Создавать по нетворк моделям - логично кстати, спасибо.
По поводу изменений в апи - это ведь не всегда изменение в задаче. Так (наверное) бывает, что "мы малясь поменяли апи, но мы вам чёт забыли сказать. Почему поменяли - не ваше дело, набор данных не изменился, поправьте там у себя на клиенте, чтобы всё работало". И если бы у меня был тест, который чекал пришедший ответ на корректность, такие ситуации можно было бы быстрее детектить.
Starikov
viewModel.run {
sendResultToServer(it)
saveResultToDatabase()
}
ок. вот эти две функции выполняются в viewModeScope
я хочу просто измерить время их выполнения. выполняются они в withContext(IO)
просто нужно узнать сильно долго выполняются два действия или нет