Android Xamarin闪屏示例在手机的横向模式下不起作用。如何修复它?
我从Xamarin网站下载了闪屏示例: 我编译并在手机上运行了它: 在纵向模式(垂直)下拿着手机时,它工作正常。启动屏幕变得直接可见,几秒钟后,带有按钮的视图变得可见。当关闭并重新启动应用程序时,它仍然可以正常工作 之后,我再次关闭手机,并将手机保持在横向(水平)模式。现在,我再次启动了应用程序。我的手机冻结了几秒钟,溅起的水花看不见了。在那之后,我用按钮看到了我的观点 当您试图重现此问题时,请确保:Android Xamarin闪屏示例在手机的横向模式下不起作用。如何修复它?,android,xamarin,splash-screen,Android,Xamarin,Splash Screen,我从Xamarin网站下载了闪屏示例: 我编译并在手机上运行了它: 在纵向模式(垂直)下拿着手机时,它工作正常。启动屏幕变得直接可见,几秒钟后,带有按钮的视图变得可见。当关闭并重新启动应用程序时,它仍然可以正常工作 之后,我再次关闭手机,并将手机保持在横向(水平)模式。现在,我再次启动了应用程序。我的手机冻结了几秒钟,溅起的水花看不见了。在那之后,我用按钮看到了我的观点 当您试图重现此问题时,请确保: 不要试图在虚拟设备上复制它(行为不同) 确保睡眠至少需要10秒钟,然后你才能真正看到问题
- 不要试图在虚拟设备上复制它(行为不同)
- 确保睡眠至少需要10秒钟,然后你才能真正看到问题所在:一个冻结的应用程序而不是启动屏幕
- 如果您没有三星Trend Lite,可以在另一款小型智能手机上试用。我发现很难想象这会是一个“仅限三星趋势Lite”的问题
[Activity(Theme = "@style/Theme.Splash", MainLauncher = true, NoHistory = true)]
public class SplashActivity : Activity
{
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
Thread.Sleep(10000); // Simulate a long loading process on app startup.
StartActivity(typeof(Activity1));
}
}
活动的OnCreate()
方法在UI线程上执行,因此调用线程。其中的Sleep()
将锁定主线程,可能会生成一个应用程序无响应(ANR)以显示给用户
这是Xamarin文档中的错误,不应在UI线程上运行Thread.Sleep()
,尤其是在活动的一个核心生命周期回调中
通过使用后台线程执行睡眠,然后回调splash活动以启动下一个活动来修复此问题:
[Activity(Theme = "@style/Theme.Splash", MainLauncher = true, NoHistory = true)]
public class SplashActivity : Activity
{
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
System.Threading.Tasks.Task.Run( () => {
Thread.Sleep(10000); // Simulate a long loading process on app startup.
StartActivity(typeof(Activity1));
});
}
}
您链接的文件中有一个大问题:
[Activity(Theme = "@style/Theme.Splash", MainLauncher = true, NoHistory = true)]
public class SplashActivity : Activity
{
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
Thread.Sleep(10000); // Simulate a long loading process on app startup.
StartActivity(typeof(Activity1));
}
}
活动的OnCreate()
方法在UI线程上执行,因此调用线程。其中的Sleep()
将锁定主线程,可能会生成一个应用程序无响应(ANR)以显示给用户
这是Xamarin文档中的错误,不应在UI线程上运行Thread.Sleep()
,尤其是在活动的一个核心生命周期回调中
通过使用后台线程执行睡眠,然后回调splash活动以启动下一个活动来修复此问题:
[Activity(Theme = "@style/Theme.Splash", MainLauncher = true, NoHistory = true)]
public class SplashActivity : Activity
{
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
System.Threading.Tasks.Task.Run( () => {
Thread.Sleep(10000); // Simulate a long loading process on app startup.
StartActivity(typeof(Activity1));
});
}
}
您链接的文件中有一个大问题:
[Activity(Theme = "@style/Theme.Splash", MainLauncher = true, NoHistory = true)]
public class SplashActivity : Activity
{
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
Thread.Sleep(10000); // Simulate a long loading process on app startup.
StartActivity(typeof(Activity1));
}
}
活动的OnCreate()
方法在UI线程上执行,因此调用线程。其中的Sleep()
将锁定主线程,可能会生成一个应用程序无响应(ANR)以显示给用户
这是Xamarin文档中的错误,不应在UI线程上运行Thread.Sleep()
,尤其是在活动的一个核心生命周期回调中
通过使用后台线程执行睡眠,然后回调splash活动以启动下一个活动来修复此问题:
[Activity(Theme = "@style/Theme.Splash", MainLauncher = true, NoHistory = true)]
public class SplashActivity : Activity
{
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
System.Threading.Tasks.Task.Run( () => {
Thread.Sleep(10000); // Simulate a long loading process on app startup.
StartActivity(typeof(Activity1));
});
}
}
您链接的文件中有一个大问题:
[Activity(Theme = "@style/Theme.Splash", MainLauncher = true, NoHistory = true)]
public class SplashActivity : Activity
{
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
Thread.Sleep(10000); // Simulate a long loading process on app startup.
StartActivity(typeof(Activity1));
}
}
活动的OnCreate()
方法在UI线程上执行,因此调用线程。其中的Sleep()
将锁定主线程,可能会生成一个应用程序无响应(ANR)以显示给用户
这是Xamarin文档中的错误,不应在UI线程上运行Thread.Sleep()
,尤其是在活动的一个核心生命周期回调中
通过使用后台线程执行睡眠,然后回调splash活动以启动下一个活动来修复此问题:
[Activity(Theme = "@style/Theme.Splash", MainLauncher = true, NoHistory = true)]
public class SplashActivity : Activity
{
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
System.Threading.Tasks.Task.Run( () => {
Thread.Sleep(10000); // Simulate a long loading process on app startup.
StartActivity(typeof(Activity1));
});
}
}
我刚刚发现了另一个解决方案。使用计时器有点奇怪,但它解决了问题
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
System.Timers.Timer t = new System.Timers.Timer(1);
t.Elapsed += (o, e) =>
{
t.Stop();
Thread.Sleep(10000); // Simulate a long loading process on app startup.
StartActivity(typeof(Activity1));
};
t.Start();
}
我刚刚发现了另一个解决方案。使用计时器有点奇怪,但它解决了问题
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
System.Timers.Timer t = new System.Timers.Timer(1);
t.Elapsed += (o, e) =>
{
t.Stop();
Thread.Sleep(10000); // Simulate a long loading process on app startup.
StartActivity(typeof(Activity1));
};
t.Start();
}
我刚刚发现了另一个解决方案。使用计时器有点奇怪,但它解决了问题
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
System.Timers.Timer t = new System.Timers.Timer(1);
t.Elapsed += (o, e) =>
{
t.Stop();
Thread.Sleep(10000); // Simulate a long loading process on app startup.
StartActivity(typeof(Activity1));
};
t.Start();
}
我刚刚发现了另一个解决方案。使用计时器有点奇怪,但它解决了问题
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
System.Timers.Timer t = new System.Timers.Timer(1);
t.Elapsed += (o, e) =>
{
t.Stop();
Thread.Sleep(10000); // Simulate a long loading process on app startup.
StartActivity(typeof(Activity1));
};
t.Start();
}
您确定不应该在UI线程上执行此操作吗?这也解决了我设备上的问题(我刚刚发现):base.OnCreate(bundle);System.Timers.Timer t=新的System.Timers.Timer(1);t、 运行时间+=(o,e)=>{t.Stop();Thread.Sleep(10000);//在应用程序启动时模拟一个长的加载过程;t、 Start();这与使用后台线程差不多。这也是一个很好的解决方案!作为对将睡眠放入后台线程的回应,请尝试按照Xamarin文档建议的方式保持睡眠,并在应用程序启动时按下后退按钮退出应用程序。因为它在UI线程上,所以它将锁定用户交互,并可能生成ANR。因此,为什么要将延迟转移到后台。您确定不应该在UI线程上执行吗?这也解决了我设备上的问题(我刚刚发现):base.OnCreate(bundle);System.Timers.Timer t=新的System.Timers.Timer(1);t、 运行时间+=(o,e)=>{t.Stop();Thread.Sleep(10000);//在应用程序启动时模拟一个长的加载过程;t、 Start();这与使用后台线程差不多。这也是一个很好的解决方案!作为对将睡眠放入后台线程的回应,请尝试按照Xamarin文档建议的方式保持睡眠,并在应用程序启动时按下后退按钮退出应用程序。因为它在UI线程上,所以它将锁定用户交互,并可能生成ANR。因此wh