有没有注意到你的应用打开的时候会闪白屏或黑屏,快来学习下Google官方应用的处理方式吧!
原文链接:https://www.bignerdranch.com/blog/splash-screens-the-right-way/
这个应用的初始屏幕的做法让我有点生气。说这句话使我生厌。
初始屏幕只是浪费你的时间,是吗?作为一个Android开发者,当我看到一个闪屏,我就知道一些技术不好的童鞋在代码中添加了一个3秒的延迟。
那么,我不得不看3秒的图片直到我可以使用app。并且我每次打开应用时候都得这么做。我知道我打开了哪个app。我知道它是干什么的。请直接让我使用它。
Google推荐怎样做
你可能会惊讶听到Google主张你使用一个初始屏幕。它在material design规范中。
这并非总是如此;Google过去也反对初始屏幕,甚至称它为反面教材。
初始屏幕的正确方式
我相信Google不是自相矛盾;老的建议和新的标准一起。(使用初始屏幕浪费用户的时间不是一个好的主意。请不要那样做。)
然而,Android apps需要一些时间在启动是,尤其是冷启动。它是一个你可能不可避免的延时。在这个时间而不是留下一个白屏,为什么不显示给用户一些好的东西?这个是Google所提倡的方法。不要浪费用户的时间,他们第一次打开它不要显示给用户一个空白或应用的未配置的部分。
如果你看看最近更新的Google apps,你会看到适当的使用初始屏幕。例如,让我们看一下YouTube应用。
你看到这个初始屏幕的时间正是它让应该配置自身的时间。这是在冷启动上,这也意味着启动可能比较慢。如果app被缓存了,初始屏幕将会尽可能快地消失。
实现初始屏幕
实现一个初始屏幕可能和你想的有点不一样。你看到的闪屏会马上显示,甚至是在你的splash activity中你可以inflate一个布局文件之前。
因此你不用使用布局文件。而是指定你的初始屏幕的背景作为activity的theme的背景。首先,在res/drawable文件夹中创建一个XML drawable。
Note:所有代码可以在GitHub上找到。
1 | <?xml version="1.0" encoding="utf-8"?> |
这里设置一个背景颜色和一个图片。
下一步,你应该设置这个作为你的splash activity的主题背景。打开styles.xml 文件并为你的splash activity添加一个新的主题:
1 | <resources> |
将SplashTheme主题背景设置为你的XML drawable。在清单文件中配置这个作为activity的主题:
1 | <activity |
最后,SplashActivity类只是引导你跳到主activity:
1 | public class SplashActivity extends AppCompatActivity { |
注意你甚至不用为SplashActivity设置一个view。显示的view来自于主题。当你在主题中为你的splash activity设置一个UI,它会马上可见。
如果你的splash activity有布局文件,只有当应用完全初始化完成才会显示给用户,显示的太晚了。你希望应用初始化完成之前的时间显示初始屏幕。
正确的做法
完成以上步骤,你可以看到实现初始屏幕的正确方式:
有了这方面的知识,让你用正确的方式显示初始屏幕。不要浪费用户的时间,当他们等待的时候显示一些比较好的东西。