Android Oreo(8.0) 背面显示闪屏
Android Oreo(8.0) on back displays splash screen
我在 android 8.0 设备上观察到这种奇怪的行为。
应用午餐按预期显示启动画面并移至下一个 activity(MainActivity)。如果我在 MainActivity 中按下后退按钮,它会再次显示启动画面并自行返回 MainActivity。
这仅发生在 Android 三星 S7 和 Nexus 5X 中检查的 8.0 设备中。
它在 Android 5.0(Samsung J7) 中没有任何问题。
在这里,我在启动画面 activity 以及启动主题中添加了 NoHistory = true。
类似于此处解释的初始屏幕代码:xamarin android splash
我尝试过的事情:
- 添加 oreo 属性(V26 样式)android:windowSplashscreenContent 而不是
android:windowBackground 在主题中。 example link
- 导航后在启动画面中添加 finish() 可以正常工作,但会显示一些崩溃效果而且我想知道上述行为的原因。
感谢 hints/root-cause 解决此问题。谢谢
编辑:
代码启动 activity:
[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
我在我的设备上测试了你的代码,这个问题与
有关
<item name="android:windowIsTranslucent">true</item>
在 styles.xml 的 InspectTheme
中。
如果我删除这一行,这个 GIF 是 运行 结果。
现在有styles.xml
<?xml version="1.0" encoding="UTF-8" ?>
<resources>
<style name="InspectTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:windowNoTitle">true</item>
<item name="android:windowActionBar">false</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:textAllCaps">false</item>
</style>
<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>
</style>
</resources>
我在 android 8.0 设备上观察到这种奇怪的行为。
应用午餐按预期显示启动画面并移至下一个 activity(MainActivity)。如果我在 MainActivity 中按下后退按钮,它会再次显示启动画面并自行返回 MainActivity。
这仅发生在 Android 三星 S7 和 Nexus 5X 中检查的 8.0 设备中。 它在 Android 5.0(Samsung J7) 中没有任何问题。
在这里,我在启动画面 activity 以及启动主题中添加了 NoHistory = true。 类似于此处解释的初始屏幕代码:xamarin android splash
我尝试过的事情:
- 添加 oreo 属性(V26 样式)android:windowSplashscreenContent 而不是 android:windowBackground 在主题中。 example link
- 导航后在启动画面中添加 finish() 可以正常工作,但会显示一些崩溃效果而且我想知道上述行为的原因。
感谢 hints/root-cause 解决此问题。谢谢
编辑: 代码启动 activity:
[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
我在我的设备上测试了你的代码,这个问题与
有关<item name="android:windowIsTranslucent">true</item>
在 styles.xml 的 InspectTheme
中。
如果我删除这一行,这个 GIF 是 运行 结果。
现在有styles.xml
<?xml version="1.0" encoding="UTF-8" ?>
<resources>
<style name="InspectTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:windowNoTitle">true</item>
<item name="android:windowActionBar">false</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:textAllCaps">false</item>
</style>
<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>
</style>
</resources>