Xamarin Android

时间:2015-11-18 20:35:42

标签: android xamarin xamarin.android

我正在创建一个显示启动画面的应用,然后创建主要活动。我正在按照这个看起来很简单的教程:https://developer.xamarin.com/guides/android/user_interface/creating_a_splash_screen/

在实施之后,我可以成功地看到飞溅,但有时(20个中的1个)使用S5我看到以下屏幕:

Wrong screen

接着是(右)飞溅(取自模拟器,但只是为了说明我的观点):

enter image description here

所以我的猜测是,有时Xamarin需要很长时间来加载应用程序,因此它有延迟显示启动。有没有办法阻止它?

更新1 我已经按照教程进行了操作,但我已经为此删除了睡眠:

Insights.Initialize ("<APP_KEY>", Application.Context);
StartActivity(typeof (MainActivity));

2 个答案:

答案 0 :(得分:4)

该示例调用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));
                });
            });
        }
    }
}

答案 1 :(得分:1)

即使这篇文章相当陈旧,我在实现SplashScreen时也有类似的经验,可以通过更新SplashScreen的样式/主题来解决这个问题。 @frederico m rinaldi有时看到的屏幕通常是使用Android的默认(Holo)主题创建的。

虽然您没有提供应用于SplashScreen的样式(请参阅accepted answerTheme = @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>

您可能会注意到我只使用黑色作为背景,因为我的SplashScreen使用自定义布局文件而不是静态图像(this.SetContentView(Resource.Layout.SplashScreen);)。此外,加载图像(drawable)可能需要一些时间,这可能是您可以看到默认主题而不是启动画面的主要原因。 此外,我省略了某些属性的android: XML命名空间,这些属性归因于Android支持库功能的Google's internal implementation

请注意,要使用AppCompat主题,您的应用必须包含AppCompat support library,并且您的活动必须包含Android.Support.V7.App.AppCompatActivity