Xamarin 5.0 创建启动画面

Posted

技术标签:

【中文标题】Xamarin 5.0 创建启动画面【英文标题】:Xamarin 5.0 Create Splash Screen 【发布时间】:2022-01-04 23:02:12 【问题描述】:

我创建了一个 Xamarin Forms 5.0 应用程序 (VS 2022)。我的项目由 androidios 的主要应用程序和端口组成。我想添加一个启动画面,它执行以下操作:

    显示徽标 在后台创建表(如果它们不存在) 从外部 API 中提取数据并加载表格。 完成第 2 步和第 3 步后,关闭启动屏幕并打开主应用程序(例如,在第 2 步和第 3 步完成之前,不要让用户使用该应用程序。)

我编写了执行步骤 2 和 3 的代码,但它在显示的第一个视图中运行。我宁愿在启动画面中运行此代码。有什么方法可以在主应用程序中构建启动画面,而无需将其添加到每个设备特定的应用程序(即 Android 和 iOS 应用程序)?

现在,我在 App.xaml.cs OnStart 方法中运行此代码。但是,这会导致屏幕保持空白,直到代码完成运行,然后屏幕才会显示。我就是这样设置的:

App.xaml.cs

 public partial class App : Application
    
        static Database database;      
        public IMyDataStore<MyViewPagesModel> _MyDataStore=> DependencyService.Get<IMyDataStore<MyViewPagesModel>>();

        public static Database Database
        
            get
            
                if (database == null)
                
                    database = new Database(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "my_db.db3"));
                
                return database;
            
        

        public App()
        
            InitializeComponent();            
            DependencyService.Register<MyDataStore>();
            MainPage = new AppShell();
        

        protected override void OnStart()
        
            if(Database != null)
            
                Database.CreateTables();                
                Task.Run(async () => await MyDataStore.PullDataFromAPI()).Wait();                 
             
             
    

MyDataStore.cs

public class MyDataStore: IMyDataStore<MyViewPagesModel>
    
        static HttpClient client = new HttpClient();
        readonly MyViewPagesModel _pages;
        Database db;     
        private HttpClient httpClient;

        public MyDataStore()
        
            _pages = new MyViewPagesModel_pages();
            db = App.Database;
            httpClient = new HttpClient();
        
        public async Task PullDataFromAPI()
           //do stuff
        
  

我正在尝试在启动时同时运行

Database.CreateTables();                
Task.Run(async () => await MyDataStore.PullDataFromAPI()).Wait(); 

但是,我不希望屏幕冻结。我希望它显示一个徽标并滚动一些加载文本,但不确定如何?这可以在启动画面中完成,还是我需要在不同的线程上运行这两种方法?

谢谢

【问题讨论】:

也许您可以尝试创建一个新的 ContentPage,例如 SplashScreenPage。然后将您的徽标和动画添加到其中。然后在Database 之前在OnStart() 中调用它,例如MainPage = new SplashScreenPage ();。最后,在Database 事情完成后致电MainPage = new AppShell(); 【参考方案1】:

Xamarin.Forms 在本机启动序列完成后在每个平台上进行初始化。 Xamarin.Forms 已初始化:

Android 上 MainActivity 类的 OnCreate 方法中。

在 iOS 上 AppDelegate 类的 FinishedLaunching 方法中。

在 UWP 上 App 类的 OnLaunched 方法中。

所以,在上述方法中添加您的逻辑代码。 仅供参考,启动应用程序时应尽快显示启动画面,但 Xamarin.Forms 直到启动序列后期才初始化,这意味着启动画面必须在外部实现 所以,在上面的方法中添加你的逻辑代码。

有关 Xamarin.Android 上的初始屏幕的详细信息,请参阅Xamarin.Android splash screen.

有关 Xamarin.iOS 上的启动屏幕的详细信息,请参阅Xamarin.iOS Launch Screen。

【讨论】:

是的,这就是我最终要做的。我意识到我可以将我的数据存储依赖注入到 Android(我假设是 IOS)本机代码中,这样就可以了。谢谢【参考方案2】:

目前无法在默认 Xamarin Forms 初始屏幕期间运行后台进程。

相反,

    创建一个Content page 并添加徽标/动画。 在后台创建表,调用 API,加载表。 全部完成后,导航到应用程序的主页并将其设置为Main page

【讨论】:

以上是关于Xamarin 5.0 创建启动画面的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin(Android)制作启动画面

Xamarin.Forms (Android制作启动画面)

适用于 iOS 的 Xamarin 表单:启动画面显示蓝色边框

在 PhoneGap/Cordova 1.5.0 中显示启动画面

PhoneGap构建android启动画面不起作用

如何创建第二个启动画面(在 ios 中的默认启动画面之后)?