
Михаил
13.07.2017
21:36:48
Метод
И GetCities

Max
13.07.2017
21:37:50
И GetCities
Не понимаю, оно и так уже параллельно выполняется, в первом случае

Михаил
13.07.2017
21:38:19
.Result убивает всю параллельность

Google

Михаил
13.07.2017
21:38:35
Основной поток ловится, пока не будет этого результата

Max
13.07.2017
21:38:55

Михаил
13.07.2017
21:39:11
А какую ошибку он выдает?

Max
13.07.2017
21:40:46

Михаил
13.07.2017
21:41:05
А InnerException есть?
Это точно не в DataBaseService падает?

Max
13.07.2017
21:42:11

Михаил
13.07.2017
21:43:16
Ну вон написано же. Нет конструктора в LandingPage
Он или приватный, или другой тип принимает

Max
13.07.2017
21:43:39
но он есть

Михаил
13.07.2017
21:44:30
А что он принимает?

Max
13.07.2017
21:45:42
Так, стопе, я думал эта штука сначала ViewModel где-то цепляет

Google

Max
13.07.2017
21:45:53
Сама страница-то пустой конструктор имеет
Вот это проблема века
?
Спасибо, я кажется понял

Михаил
13.07.2017
21:48:13
И ещё. async void лучше не использовать. В этом случае исключения падающие пропадают. Отсюда и непонятки
Вместо этого async Task

Max
13.07.2017
21:48:30
А что лучше ?
А пример можно ?

Михаил
13.07.2017
21:49:14
Просто void на Task замени)

Max
13.07.2017
21:49:56
? это я могу))

Михаил
13.07.2017
21:50:26
И соответственно везде выше тоже, если есть async void на таски поменять

Max
13.07.2017
21:52:32

Kirill
13.07.2017
22:20:34

Max
13.07.2017
22:20:47
@BOOMikru Еще вопрос вот есть, как можно заранее кешировать ViewModel с MvvM Light ?

Kirill
13.07.2017
22:28:50

Кита
14.07.2017
04:35:27
Здесь нужно правильно подойти к отлову эксепшнов
не try catchить глобально, а только те методы которые могут упасть. Соответственно внутри async void метода если этот метод может завершиться непредвиденно делаем try catch
в случае с таском если мы хотим глобально во всех тасках перехватывать эксепшны и хотя бы знать что упало и отправлять эту инфу в хокей-апп например - надо в виде экстеншна прикручивать ещё дополнительный ContinueWith с параметром OnFaulted

Google

Кита
14.07.2017
04:40:10
меня если честно задолбала эта дичь с async void. Где-то вычитали и давай распространять

Aleksandr
14.07.2017
04:42:13

Кита
14.07.2017
04:43:54
в таске любой выпавший эксепшн крэшит таск
в async void методе любой выпавший эксепшн возврашяется в управление UI треда или треда вызвавшего async void метод
в UIтреде аппа падает
и пусть себе падает в тех методах где гарантированно они должны завершиться без исключений.
хокейапп это подхватит, пошлет репорт и будет известно где проблема
в случае если просто так упадет таск - ничего не будет известно. Где упало? Что упало? Аппа работает, но ничего не происходит.

Aleksandr
14.07.2017
04:48:44

Кита
14.07.2017
04:49:06
нет, надо правильно подходить к отлову эксепшнов
и падение таска не закрывает аппку как раз. аппка живет. Но ничего не делает. и непонятно что произошло

Aleksandr
14.07.2017
04:51:30

Кита
14.07.2017
04:51:51
ну так и переделывать все на async Task это тоже не правильно

Aleksandr
14.07.2017
04:53:31
только где это возможно и нужно

Кита
14.07.2017
05:03:39
ну очевидно что async Task нужно делать методы которые будут awaitятся в других методах. Но корневой метод из которого возможен уход в бэкграунд - async void. В нем в зависимости от необходимости - например мы читаем файлы и мы знаем по документации что асинхронные методы чтения/записи могут завершиться с исключением - берем и ловим их try catch и обрабатываем. А например если мы делаем таски в которых происходит какая-то калькуляция чего-то и эксепшнов в этих методах быть не должно то так же как и в первом случае используем без сомнений async void в корневом методе и try catch не пишем. Если вдруг там упало с out of range или null reference - мы должны про это знать на этапе разработки и тестирования. Пусть аппа падает.


Andrey
14.07.2017
05:14:18
Вот с этого места поддержу. Например, async void можно вызвать из конструктора. Но суть не в этом, а в том что ловить исключения надо всегда по месту возникновения. Банально ждать пробитого стэка не надо - прямой путь к мемори ликам

Aleksandr
14.07.2017
05:29:21
А по отлавливанию ошибок, спорить не буду все верно сказано, хендлить только в проблемном месте, нет смысла хендлить там где шишка не вылезет.


Кита
14.07.2017
05:54:17
“юзать там где им место и когда нужно, например при использовании апи” Правильно. Апи возвращает результат. void же означает что мы результата в методе не ожидаем)

Ivan
14.07.2017
07:50:31
Коллеги, такой вопрос. Извиняюсь что не по теме Xamarin. Может ли кто нить дать поглядеть какое нить ТЗ на разработку мобильного приложения. Меня больше интересует, указываете ли вы какие разрешения экранов поддерживает мобильное приложение?

Google

Roman
14.07.2017
07:51:50
не указываем... делаем резиновые...

Slava
14.07.2017
07:51:51
Да, указывать ключевые разрешения обязательно

Roman
14.07.2017
07:52:22
главное указать минимальные платформы...

Ivan
14.07.2017
07:54:01


Slava
14.07.2017
07:55:43
2.1 Требования к дизайну мобильного приложения
Дизайн мобильного приложения должен быть создан с учетом требований компаний Google и Apple для Android и iOS, отраженным в соответствующих руководствах.
Дизайн необходимо разработать для разрешений экранов:
640х1136 пикселей (iPhone)
1536 x 2048 пикселей (iPad)
1080x1920 пикселей (смартфоны на базе Android)
1080x1920 пикселей (планшеты на базе Android)
Дизайн должен поддерживать возможность автоматического масштабирования для различных разрешений целевой операционной системы без потери функциональности и пользовательских характеристик.
Дизайн необходимо разработать только для портретного (вертикального) расположения экрана. Приложения для планшетов также должны поддерживать работу при альбомной (горизонтальной) ориентации экранов.
Дизайн должен полностью соответствовать стилистике целевой операционной системы.
и отдельным пунктом указываем эталонный список устройств
на которых приложение будет тестироваться при приемке-сдаче
а то клиенты хитрые, всю плеш проесть могут, если на каком-нибудь рутованом корявом Android проблемы будут


Кита
14.07.2017
07:57:18
ух. я бы такое не подписал)

Admin
ERROR: S client not available

Slava
14.07.2017
07:58:00
это выработалось за годы, с нормальными клиентами проблем нет ;)

Кита
14.07.2017
07:58:00
т.е это хорошие требования но недостаточные. я бы их дополнил

Slava
14.07.2017
07:58:15
это лишь часть :)
это же не все ТЗ

Кита
14.07.2017
07:58:47
я бы заменил разрешения экрана на форм факторы и плотности экранов

Slava
14.07.2017
07:59:21
дизайнер потом голову сломает :)
а так - вот тебе формат выходных картинок от дизайнера

Кита
14.07.2017
08:00:13
не. дизайнер не должен быть таким) дизайнер должен быть мобильным
т.е понимать как все устроено


Slava
14.07.2017
08:00:23
3.1.2 ТТТ для пользовательского приложения Android
Пользовательское приложение Android должно поддерживать следующие версии операционных систем:
Операционная система Android 4.1 - 6.0
Работа приложения на других версиях операционных систем, не включенных в список, возможна, но не гарантирована.
Приемка-сдача результатов работ должна осуществляться на следующих устройствах, работающих под управлением официальных версий прошивок операционных систем от самих производителей данных устройств (эталонный список устройств Android):
Google Nexus 5
Samsung Galaxy A5
Samsung Galaxy S6
Micromax Q415 (предоставляется Заказчиком на весь период тестирования)
Goolge Nexus 7
Google Nexus 10
Samsung Galaxy Tab A
В случае возникновения ошибок на устройствах, не входящих в список эталонных, Исполнитель проводит техническую экспертизу, и если ошибка была допущена по вине Исполнителя, то осуществляется ее устранение. Если ошибка связана с особенностями или недостатками самого устройства или его операционной системы, то Исполнитель не обязан устранять выявленную ошибку.

Google

Кита
14.07.2017
08:00:49
и верстать под 16:9 в векторе с указаниями как должны растягиваться элементы

Slava
14.07.2017
08:00:55
это по эталонному списку устройств

Ivan
14.07.2017
08:01:09
Спасибо за разъяснения.

Кита
14.07.2017
08:01:18
вышел гнусмас s8 - надо его в договоры внести

Slava
14.07.2017
08:01:36
да, немного менять. зависит от клиента и проекта
зачем?
мы входим в проект и выходим из него на понятных условиях

Кита
14.07.2017
08:02:13
ну а почему s6 эталонный а s8 нет?

Slava
14.07.2017
08:02:21
потому что пример старый

Кита
14.07.2017
08:02:28
я как клиент хочу все топовые устройства считать эталонными

Ivan
14.07.2017
08:05:02

Кита
14.07.2017
08:09:22
короче у нас тоже выработаны определенные требования и в этих требованиях мы пишем соотношения сторон под который верстается дизайн и указываем максимальную и минимальную плотность экрана. На ios и андроид максимальная и минимальная она одинаковая - максимум xxhdpi или @3x, минимум mdpi или @1x(может меняться в сторону xhdpi @2x). Соотношения сторон 16:9 на смартфонах, 4:3 на планшетах.
отдельно для ios можем обговорить устройства и обычно это ограничивается “саппортим iphone 4 или нет”. Уже как правило нет. И все

Andrey
14.07.2017
08:10:36
Тоже приблизительно подобный набор оговорок

Кита
14.07.2017
08:10:49
ну отдельно можем прописать список устройств который есть у нас и который есть у заказчика на которых все это будет тестироваться
но нигде не указывам что вот на такой модели аппа должна работать, а на всех остальных - нет

Ivan
14.07.2017
08:11:19

Кита
14.07.2017
08:18:28
и главное все решение оно основано на том что производители договорились что в принципе они будут стараться делать смартфоны 16:9 и планшеты 4:3. И статистика по количеству девайсов разного формфактора она говорит о том что это самые распространенные. 16:10 ещё есть и появился 18:9 - но они больше 16:9 - один в длину другой в ширь поэтому их можно отдельно не описывать. А дизайнер должен верстать все под базовые соотношения с пониманием того как все это будет растягиваться
так и живем

Ivan
14.07.2017
08:19:29