Xamarin Android中启动画面太慢

3
我正在创建一个应用程序,它显示启动画面,然后创建主活动。我正在遵循这个教程,它看起来很简单:https://developer.xamarin.com/guides/android/user_interface/creating_a_splash_screen/
在实现后,我可以成功地看到启动画面,但是有时候(20分之1的概率),使用S5手机时会看到以下屏幕: Wrong screen 接着是正确的启动画面(来自模拟器): enter image description here 因此,我的猜测是有时候 Xamarin 花费太长时间加载应用程序,因此有延迟显示启动画面。有没有办法防止这种情况? 更新 1 我已经按照教程操作,但我已经移除了 Thread.Sleep 这段代码:
Insights.Initialize ("<APP_KEY>", Application.Context);
StartActivity(typeof (MainActivity));

你是否按照教程正确设置了启动主题中的图像,并为活动设置了主题?看起来你的活动没有windowBackground图像。你是否在其他版本的Android上进行过检查? - dylansturg
是的,我按照教程设置了一切,19个里面有18个看起来都很好,只有1个会在第一屏显示不到1秒钟,然后才显示正确布局的第二屏。 - Federico M. Rinaldi
@FedericoM.Rinaldi,我认为你在处理位图时遇到了OOM。转到输出窗口,查看日志,无论如何,一些旧设备在未来几年内将会变得不堪使用,我曾经面临过同样的问题。 - Jagadeesh Govindaraj
@matthewrdev 谢谢回复,但我没有使用 Sleep,我已经更新了我的问题。 - Federico M. Rinaldi
2个回答

5

例子在UI线程上调用了Thread.Sleep(10000);... 这将锁定应用并生成ANR

通过将睡眠放到后台,然后触发下一个活动来修复它:

namespace SplashScreen
{
    using System.Threading;

    using Android.App;
    using Android.OS;

    [Activity(Theme = "@style/Theme.Splash", MainLauncher = true, NoHistory = true)]
    public class SplashActivity : Activity
    {
        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);

            Task.Run (() => {
                Thread.Sleep (10000); // Simulate a long loading process on app startup.
                RunOnUiThread (() => { 
                    StartActivity (typeof(Activity1));
                });
            });
        }
    }
}

谢谢你的回答,但我没有使用Sleep。我已经更新了我的问题,但我认为你的回答仍然适用。我会及时告知你。 - Federico M. Rinaldi

1
即使这篇文章有点旧,但我在实现启动画面时也遇到了类似的问题,并通过更新启动画面的样式/主题来解决了这个问题。@frederico m rinaldi有时会看到的屏幕通常是使用Android的默认(Holo)主题创建的。
虽然您没有提供应用于启动画面的样式(请参阅接受的答案Theme = @style/Theme.Splash),但这是我的样式。也许您可以检查它们是否不同。
<style name="Theme.Splash" parent ="Theme.AppCompat.Light.NoActionBar">
  <!-- Use a fully opaque color as background. -->
  <item name="android:windowBackground">@android:color/black</item>
  <!-- This removes the title bar seen within the first screen. -->
  <item name="windowNoTitle">true</item>
  <!-- Let the splash screen use the entire screen space by enabling full screen mode -->
  <item name="android:windowFullscreen">true</item>
  <!-- Hide the ActionBar (Might be already defined within the parent theme) -->
  <item name="windowActionBar">false</item>
</style>

你可能会注意到我只使用黑色作为背景色,因为我的启动屏幕使用自定义布局文件而不是静态图片 (this.SetContentView(Resource.Layout.SplashScreen);)。此外,加载图片 (drawable) 可能需要一些时间,这可能是您看到默认主题而不是启动屏幕的主要原因。 此外,我省略了一些属性的 android: XML 命名空间,这是由于 Google 的 Android 支持库特性 的内部实现所致。
请注意,为了使用 AppCompat 主题,您的应用程序必须包括 AppCompat 支持库,并且您的 Activity 必须继承 Android.Support.V7.App.AppCompatActivity

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接