MAUI应用启动页显示时运行代码的实现问题
MAUI启动页显示时执行后台任务的解决方案
问题根源
你沿用Xamarin Android的SplashActivity实现方式,但MAUI的启动逻辑和原生Xamarin不同:默认生成的MainActivity仍保留MainLauncher = true属性,导致系统同时触发启动流程,即使你未手动启动MainActivity,MAUI的初始化逻辑也会自动拉起应用UI。
解决步骤
1. 修改MAUI默认MainActivity
找到Android项目中的MainActivity.cs,移除MainLauncher = true属性,让它不再作为应用启动入口:
[Activity(Theme = "@style/Maui.SplashTheme", NoHistory = false)] public class MainActivity : MauiAppCompatActivity { // 保留原有代码即可 }
2. 完善自定义SplashActivity
确保SplashActivity作为唯一启动入口,在后台任务完成后再启动MAUI的MainActivity,同时修正异步操作的线程处理:
[Activity(Theme = "@style/MyTheme.Splash", MainLauncher = true, NoHistory = true)] public class SplashActivity : MauiAppCompatActivity { static readonly string TAG = "X:" + typeof(SplashActivity).Name; protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); Log.Debug(TAG, "SplashActivity.OnCreate"); } protected override void OnResume() { base.OnResume(); // 直接启动异步任务,避免Task.Start带来的线程上下文问题 _ = PerformStartupWorkAsync(); } async Task PerformStartupWorkAsync() { Log.Debug(TAG, "开始执行启动后台任务"); // 替换为实际的耗时启动操作(如初始化数据库、加载远程配置等) await Task.Delay(3000); Log.Debug(TAG, "启动任务完成,准备启动主页面"); // 启动MAUI的主Activity StartActivity(new Intent(this, typeof(MainActivity))); } }
3. 配置启动页主题
在Android项目的Resources/values/styles.xml中,定义启动页主题MyTheme.Splash,确保显示指定启动图且无多余UI元素:
<style name="MyTheme.Splash" parent="Theme.Maui.NoActionBar"> <item name="android:windowBackground">@drawable/splash_screen</item> <item name="android:windowFullscreen">true</item> </style>
@drawable/splash_screen需替换为你提前准备好的启动图资源。
内容的提问来源于stack exchange,提问作者PEK
相关产品推荐
相关产品推荐

