【发布时间】:2019-10-01 06:47:55
【问题描述】:
我在 android 8.0 设备上观察到了这种奇怪的行为。
应用程序午餐按预期显示初始屏幕并移至下一个活动(MainActivity)。如果我在 MainActivity 中按下后退按钮,它会再次显示闪屏片刻,然后自行返回 MainActivity。
这种情况仅发生在搭载 Samsung S7 和 Nexus 5X 的 Android 8.0 设备上。 在 Android 5.0(Samsung J7)中没有任何问题。
在这里,我在初始活动以及初始主题中添加了 NoHistory = true。 启动屏幕代码类似于此处解释的代码:xamarin android splash
我尝试过的事情:
- 添加 oreo 属性(V26 风格) android:windowSplashscreenContent 代替 android:windowBackground 在主题中。 example link
- 在导航后在初始屏幕中添加 finish() 可以正常工作,但会显示一些崩溃效果,而且我想知道上述行为的原因。
感谢任何有关此问题的提示/根本原因。谢谢
编辑: 代码飞溅活动:
[Activity(Theme = "@style/MyTheme.Splash", MainLauncher = true, NoHistory = true)]
public class SplashActivity : AppCompatActivity
{
public override void OnCreate(Bundle savedInstanceState, PersistableBundle persistentState)
{
base.OnCreate(savedInstanceState, persistentState);
}
// Launches the startup task
protected override void OnResume()
{
base.OnResume();
Task startupWork = new Task(SimulateStartup);
startupWork.Start();
}
// Simulates background work that happens behind the splash screen
private async void SimulateStartup()
{
await Task.Delay(1000); // Simulate a bit of startup work.
StartActivity(new Intent(Application.Context, typeof(MainActivity)));
//Finish();
}
public override void OnBackPressed()
{
}
}
主题:
<style name="InspectTheme.Splash" parent ="Theme.AppCompat.Light.NoActionBar">
<!--<item name="android:windowSplashscreenContent">@mipmap/ic_splash</item>-->
<item name="android:windowBackground">@mipmap/ic_splash</item>
<item name="android:windowNoTitle">true</item>
<item name="android:noHistory">true</item>
<item name="android:windowFullscreen">true</item>
新增设备录屏here
示例代码上传here
【问题讨论】:
-
首先,你可以在MainActivity中重写
OnBackPressed方法,防止像这段代码public override void OnBackPressed() { }这样的后退按钮,如果仍然不行,你能提供一个关于你的启动画面的演示吗?我测试了docs.microsoft.com/en-us/xamarin/android/user-interface/… 链接,我无法重现这个问题,它在 Nexus 5X 中运行正常 -
@LeonLu-MSFT 按下后退按钮时的预期行为是像往常一样将应用程序移至后台,因此无法禁用它。添加了闪屏代码sn-p。如果您还需要什么,请告诉我。
-
@LeonLu-MSFT 更新了示例代码链接
标签: android xamarin xamarin.android android-8.0-oreo