Как распределить задачи по созданию компонентов пользовательского интерфейса, чтобы iOS WatchDog не убивал приложение прIOS

Программируем под IOS
Ответить
Гость
 Как распределить задачи по созданию компонентов пользовательского интерфейса, чтобы iOS WatchDog не убивал приложение пр

Сообщение Гость »


Я создаю приложение для iOS (на Мауи), используя пользовательские системы пользовательского интерфейса и компоненты, созданные на основе базовых элементов. Запуск приложения выглядит так:

Код: Выделить всё

public partial class App : Application {

SpecialPage1 page1;
SpecialPage2 page2;
SpecialPage3 page3;
SpecialPage4 page4;
AbsoluteLayout abs;

public App() {

//set main page of app
ContentPage mainPage = new ();
this.MainPage = mainPage;
abs = new();
mainPage.Content = abs;

//start building and adding UI elements to it
page1 = new();
abs.Add(page1);

page2 = new();
abs.Add(page2);

page3 = new();
abs.Add(page3);

page4 = new();
abs.Add(page4);

}

}
Где гипотетически

Код: Выделить всё

SpecialPage1
и т. д. представляют собой пользовательские объекты, содержащие множество других элементов пользовательского интерфейса, каждый из которых имеет сложное время сборки.
iOS закроет ваше приложение при запуске, если сборка займет слишком много времени (даже в режиме отладки). когда он, естественно, будет медленнее).
Поскольку это элементы пользовательского интерфейса, они должны быть построены в основном потоке. Поэтому мне интересно, какой лучший способ — сдвинуть или десинхронизировать их здание с основным циклом.
Идея 1: Таймер
Один из вариантов — создать таймер потока пользовательского интерфейса и на каждом такте таймера запускать такую ​​функцию, как:

Код: Выделить всё

void timerTick(){

if (page1 ==null){
page1= new();
abs.Add(page1);
}
else if (page2==null){
page2 = new();
abs.Add(page2);
}
else if (page3==null){
page3 = new();
abs.Add(page3);
}
else if (page4==null){
page4 = new();
abs.Add(page4);
}
else{
timer.Stop();
}

}
Теоретически, все страницы будут постепенно создаваться на разных циклах цикла приложения (или, по крайней мере, на расстоянии каждого тика), я считаю, что это может помешать WatchDog вижу проблему.
Идея 2: асинхронная
Я не уверен, верно ли это, но мне интересно, запускает ли сборка страниц как асинхронные задачи но в основной теме помогло бы. Если их ждут, я думаю, это все равно приведет к сбою, если они займут слишком много времени. Но если их не ждут, то, возможно, это поможет лучше?
т.е.:

Код: Выделить всё

        public App() {

//set main page of app
ContentPage mainPage = new ();
this.MainPage = mainPage;
abs = new();
mainPage.Add(abs);

//start building and adding UI elements to it
Application.Current.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => {
page1 = new();
abs.Add(page1);
});

Application.Current.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => {
page2 = new();
abs.Add(page2);
});

//etc
}

Я не очень хорошо разбираюсь в асинхронных функциях, поэтому не знаю, поможет ли это каким-либо образом.
Вопрос
Допустим, нет возможности упростить сборку всего приложения, но можно уменьшить сложность сборки компонентов (

Код: Выделить всё

page1,page2,page3,page4
) can happen gradually over a certain amount of time and the user interface can be "locked" from user input until everything is loaded.
What would the best solution be to let this build progressively happen without triggering the WatchDog?
Thanks for any thoughts.


Источник: https://stackoverflow.com/questions/781 ... killing-ap
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»