@xamarin_russia

Страница 466 из 619
Max
13.07.2018
12:19:18
а какие события используются?
только измненение состояния активити

у XF один активити, если оно есть (и отображается), мне надо спрятать вьюху с сервиса

vladimir
13.07.2018
12:19:46
всмысле, какой-то messenger используется, что нужно знать о отправителе?

Google
vladimir
13.07.2018
12:20:03
при подписке и отписке мы не знаем, кто отправитель

Max
13.07.2018
12:20:34
при подписке и отписке мы не знаем, кто отправитель
т.е. по сути CrossCurrentActivity.Current.ActivityStateChanged -= Current_ActivityStateChanged; не имеет смысла?

потому что активити уже была задеструкчена?

vladimir
13.07.2018
12:20:49
и где этот код?

в сервисе что ли?

Max
13.07.2018
12:21:03
да, я понял надо его перенести в активити

vladimir
13.07.2018
12:21:18
удоли

Max
13.07.2018
12:21:21
и оттуда уже дергать сервис, если он существует

Кита
13.07.2018
12:21:48
Вопрос знатокам: CrossCurrentActivity от JamesMotenmargo может потенциально отдать Null через CrossCurrentActivity.Current.Activity
ну если до инициализации вызываешь то да. вообще в Application сейчас должно быть public override void OnCreate() { base.OnCreate(); CrossCurrentActivity.Current.Init(this); RegisterActivityLifecycleCallbacks(this); } и сэтаешь активити в OnActivityCreated OnActivityResumed OnActivityStarted

vladimir
13.07.2018
12:22:17
общайся с сервисом через https://developer.android.com/guide/components/bound-services

Кита
13.07.2018
12:24:24
vladimir
13.07.2018
12:25:11
оно не нужно всё, если всё делать из MainActivity OnResume/OnPause

Google
Кита
13.07.2018
12:26:20
Вообще статический контекст конечно нужен, но завязываться на него имеет смысл только в презентерах или на уровне View, а в OnResume/OnPause нужно пробрасывать события вообще по всему стэку страниц и всему стэку вьмоделей, чтобы они знали о LC

Николай
13.07.2018
12:30:11
Ребят привет. Посовейтуте решения (паттерны) на базе примеров Xamarin Forms по «компонентной» загрузке. То есть инициировать все страницы и компоненты не при старте приложения а при необходимости. Цель - скорость запуска. Хочу эти архитектурные знания закладывать изначально при создании апа.

Николай
13.07.2018
12:31:09
пока мне это непонятный набор слов )

ну буду гуглить

спасиб

а может встрчал какие практичные решения?

Николай
13.07.2018
12:32:19
а ну хотя я начал гуглит

норм ответов

буду исследовать

спасиб за наводку

Max
13.07.2018
12:33:28
скорость загрузки будет если юзать LazyInstance

ну типо по требованию, а не все сразу создавать

навигацию запилите с Resolve самих страниц и их ViewModel

можно через конструктор

не знаю, насколько это правильно или неправильно. Но работает не плохо

Николай
13.07.2018
12:35:53
?

Max
13.07.2018
12:35:58
в Binwell юзают что-то подобное, только без IoC контейнера, завязанном на авторегистрации по имени View и ViewModels

Google
Max
13.07.2018
12:36:32
«что такое resolve самих страниц»>\
https://www.ozon.ru/context/detail/id/22104901/

Николай
13.07.2018
12:37:07
гуд

Max
13.07.2018
12:37:47
страница 96, часть 1, глава 3

Max
13.07.2018
12:38:28
вот авторегистрацию я дико хейчу)
ну у них там в принципе нет IoC

там через рефлексию бахают

я так и не понел почему они так делают, но видимо у Славы зуб на IoC

работает не трогай

Кита
13.07.2018
12:43:41
там через рефлексию бахают
ну вот оно и тормозит на старте

Max
13.07.2018
12:44:13
ну вот оно и тормозит на старте
Сейчас придет Кирилл и начнется схватка)

Кита
13.07.2018
12:44:41
ну тебе в параметрах приходит инстанс Activity - сэтай в статическую проперти плагина и на этом все

Max
13.07.2018
12:48:26
в 3
ок. А как мне дергать правильно изменение состояния нативного сервиса, в зависимости от состояний активити?

Нормально сделать в сервисе публичное событие и вызывать его в этих методах?

Кита
13.07.2018
12:51:06
Нормально сделать в сервисе публичное событие и вызывать его в этих методах?
Как хочешь. Только как по мне в application не должно быть такого

Max
13.07.2018
12:52:38
Как хочешь. Только как по мне в application не должно быть такого
ну а как тогда было бы архитектурно верно?

Кита
13.07.2018
12:53:35
ну а как тогда было бы архитектурно верно?
сервис зависящий от CurrentActivity и уже в нем подписываешься и что-то меняешь внутри в зависимости от состояния

Google
Кита
13.07.2018
12:54:18
ну так сейчас и есть
ну а чем не устраивает?

Max
13.07.2018
12:54:36
ну а чем не устраивает?
ну я спрашивал, может ли быть там null в CurrentActivity

потому что я там подписываюсь на событие на одной активити, но ее может и не быть

он сам по себе работает

Кита
13.07.2018
12:55:20
ну я спрашивал, может ли быть там null в CurrentActivity
может. Если ты получил инстанс сервиса до OnActivityCreated

а, все понял проблему

ну вроде можно взять и все подписки перенести из старой активити в новую

Max
13.07.2018
12:58:18
ну вроде можно взять и все подписки перенести из старой активити в новую
ну я как бы тестил, оно не падает и при простой подписке на CurrentActivity. И отписке. И он нормально меняет состояния

просто мейби он там сам как-то это дело решает

Admin
ERROR: S client not available

Max
13.07.2018
12:59:00
с переносом событий

я за это спрашивал

Кита
13.07.2018
12:59:22
нет, видимо не решает. Я не знаю. Надо исходники смотреть

Nikolai
13.07.2018
14:03:39
Когда мне начинает казаться, что я уже видел все самые нелепые баги замарина, он мне выдаёт что-то вроде: System.IO.FileNotFoundException: Could not load file or assembly 'netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51' or one of its dependencies.

vladimir
13.07.2018
14:05:15
кому не лень, сфотошопьте картинку с покемонами Catch them all на Xamarin Exceptions: Catch them all

Code Writer
13.07.2018
14:58:22
Кстати, про эксепшены мне тут Java.Lang.NullPointerException прилетает в аутпут и приложение ложится

Никакой больше инфы нет

Google
vladimir
13.07.2018
15:00:29
хахаха

спасибо, вы сделали мой день

Никакой больше инфы нет
гляньте ещё в logcat

Code Writer
13.07.2018
15:04:56
спасибо, вы сделали мой день
Спасибо, что то забыл о нём, пол года не писал уже под зэмарин до этой недели

Андрей Родионович
13.07.2018
15:25:28
Всем привет, не подскажите в чем трабл и как его решить? Есть сarouselView <controls:CarouselViewControl x:Name="Carousel" IsSwipeEnabled=" True"ShowIndicators=" True" Position="1" > <controls:CarouselViewControl.ItemsSource> <x:Array Type="{x:Type View}"> <ScrollView> <RelativeLayout x:Name="Numbers" > <Button x:Name="Seven_Button" /> <Button x:Name="Eight_Button" /> <Button x:Name="Four_Button" /> <Button x:Name="Five_Button" /> <Button x:Name="Six_Button" /> <Button x:Name="One_Button" /> <Button x:Name="Two_Button" /> <Button x:Name="Three_Button" /> <Button x:Name="Zero_Button" /> <Button x:Name="Comma_Button" /> </RelativeLayout> </ScrollView> <ScrollView> <RelativeLayout> </RelativeLayout> </ScrollView> <ScrollView> <RelativeLayout BackgroundColor="Green"> </RelativeLayout> </ScrollView> <ScrollView> <RelativeLayout BackgroundColor="Red"> </RelativeLayout> </ScrollView> </x:Array> </controls:CarouselViewControl.ItemsSource> </controls:CarouselViewControl> Этот код работает нормально, но если добавить события clicked для кнопок, то сразу выдает такую ошибку "среда выполнения Common Language Runtime обнаружила недопустимую программу. "

Хочу просто всунуть в карусель пару layout с кнопками

Kirill
13.07.2018
15:49:41
Сейчас придет Кирилл и начнется схватка)
Ок) Так то тоже думал что эта логика тормозит, однако после проверки - вся логика инициализации занимает не более пары десятков миллисекунд. Думаю такая огромная задержка очень сильно влияет на скорость запуска *сарказм*

Кита
13.07.2018
15:51:07
ты просто не правильно мерил

Max
13.07.2018
15:51:10
вопрос работает ли это на IOS остается открытым

???

хотя, там вроде нельзя код генерить в рантайме, а вот это вот все можно

Кита
13.07.2018
15:53:11
что значит код нельзя в рантайме генерить

есть ILGenerator. Он в процессе AOT компилится вместе с mono и работает так как и задумывался. Можно создавать инстансы типов

Kirill
13.07.2018
15:55:41
Кита
13.07.2018
15:57:11
А как правильно?
надо начиная от создания Application класса смотреть и замерять все периоды от создания активити её старта инстанциации формсов итд. Сыпать измерения в logcat. В logcat искать момент посыла команды на запуск твоего приложения и смотреть разницу по времени с моментом создания Application класса. Это будет время запуска mono

Max
13.07.2018
15:57:46
такое можно?

есть ILGenerator. Он в процессе AOT компилится вместе с mono и работает так как и задумывался. Можно создавать инстансы типов
вот пример кода, который не заработал у меня: using System.Reflection.Emit; ... var dm = new DynamicMethod("Test", typeof(string), new Type[0]); var ig = dm.GetILGenerator(); ig.Emit(OpCodes.Ldstr, "hello world"); ig.Emit(OpCodes.Ret); var func = (Func<string>) dm.CreateDelegate(typeof(Func<string>)); Debug.WriteLine(func());

Кита
13.07.2018
16:01:32
хм, не вдавался в такие подробности

Max
13.07.2018
16:01:51
на ведре работает

Страница 466 из 619