Прежде всего показывается экран Splash, чтобы создать иллюзию того, что программа запущена, и в любой момент они будут управляться.
Во-вторых, если вы хотите показать индикатор выполнения, вам нужно точно рассчитать количество выполняемых вами задач. Затем покажите метку loading xxxxxx.......
и увеличьте индикатор выполнения после завершения каждого элемента.
Что касается вопроса оптимизации времени запуска, то в основном это зависит от функции вашего приложения.
Предположим, что ваше приложение представляет собой PIM, тогда вы можете загрузить события и задачи на сегодня и быстро показать его пользователю, а затем начать загружать другие данные.
Однажды у меня было приложение, в котором мне приходилось показывать иерархию объектов, используя Treeview, каждый узел мог иметь неограниченное количество элементов. Я загрузил объекты верхнего уровня и затем отобразил их в виде дерева и поместил маркер (на самом деле я поставил * в теге узла, который я узнал из какой-то книги .net или статьи, которую я давно прочитал, но вспомнил), когда пользователь нажимал на узел я загружал непосредственными детьми.