最近由于领导要求写一个手机APP,于是自学开始,不经意间想到使用过的手机APP在打开的时候都是会有一个启动页面,这是如何实现的呢?比较好奇,于是在网上搜到了以下这篇文章,经过个人实验的确可行,不过原文的某些描述并不是十分的清楚,个人也是经过了一些摸索才调试了出来,不管怎么样说这个方法还是蛮不错的,以下给出原文。

原文:

http://blog.csdn.net/shiguiyou/article/details/50255929

现在APP的启动页面(Splash Screen)好多都是等待3秒,好一点的还可以跳过,但是有的跳过也是假的按钮。当然像一些大厂的APP,像网易新闻等启动页面都是广告,人家要收广告费的。但是,对于一些普通的APP,有的也出现等待三秒的启动画面,出现一个大大的logo,好像告诉用户他打开的是什么应用,加深用户的映像,这完全是浪费用户的时间,给用户很差的体验!其实我只想快点进入APP啊!!!下面说下如何正确的打开Android启动页面。

Google的推荐

你也许很惊讶谷歌是支持开发者使用启动页面的,在[材料设计(Material Design)规范](https://www.google.com/design/spec/patterns/launch-screens.html)里面有写到(链接需要翻墙)。但是,以前google却把启动页面当反面教材来讲,看[这里](https://youtu.be/pEGWcMTxs3I?t=1434)(链接需要翻墙)。所以,该怎么办呢?

Android启动页面的正确方式

我相信google的说法不会自相矛盾的,新的建议和旧的建议都是站在一个角度来的,也就是说,最好不要浪费用户的时间去打开无用的启动页面。然而,好多应用一开始启动会花费一些时间,特别是第一次,你无法避免它,那么就可能会出现一个空白的页面,所以,既然这样,为什么不给用户一个更加友好的页面呢?这就是google的建议,不要浪费用户的时间,但是也不要给用户一个空白的页面,或者是一个还没初始化好的应用。
你会发现,最近谷歌更新的应用里面也使用了启动页面,比如,看一看YouTube的启动页面:

你看到在这个APP的启动页面所花费的时间正是APP所初始化配置自己的时间,第一次启动也是这样的,所以第一次是最慢的,但是如果有缓存了,那么每次再打开应该是立即打开了吧。

实现一个启动页面(Splash Screen)

实现一个启动页面可能和你想象的有点不一样。这个启动的页面必须是立即准备好的页面,即使是在Activity中加载一个xml页面也要是立刻加载好的。
所以,一般不会用layout来当启动页面。取而代之的是用一个颜色作为你的Activity的主题背景,接下来,在你的res/drawable文件夹下创建一个XML的drawable。

background_splash.xml  文件

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item
android:drawable="@color/gray"/> <item>
<bitmap
android:gravity="center"
android:src="@mipmap/ic_launcher"/>
</item> </layer-list>

其中,需要在 values文件夹中的 colors.xml  ,  添加以下语句。

这里,我设置了背景颜色和一张居中的图片。
然后,在主题中,将这个设置为Activity的背景。打开你的styles.xml然后为你的Activity添加一个新的主题。

<resources>

    <!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
</style> <style name="SplashTheme" parent="Theme.AppCompat.NoActionBar">
<item name="android:windowBackground">@drawable/background_splash</item>
</style> </resources>

在你新的SplashTheme中,设置窗口背景属性为我们之前写的XML的drawable,就是layer-list的xml。然后在你的AndroidManifest.xml中配置一下就好了。

<activity
android:name=".SplashActivity"
android:theme="@style/SplashTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

最后,在你的SplashActivity.class文件中,编码直接进入主页面就行了。

public class SplashActivity extends AppCompatActivity {

    @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); Intent intent = new Intent(this, MainActivity.class);
startActivity(intent);
finish();
}
}

这里发现你并没有为Activity设置layout视图,视图来自于主题!所以,这应该是最快的方法启动页面了(相比较加载layout视图)。如果你一定要通过加载layout来显示页面,可能你初始化完了才跳出页面,这时已经有点迟了,所以,你应该考虑用极短的时间来显示加载layout视图。

不要再浪费用户的时间了!但是,当用户第一次启动等待的时候还是要展示一些友好的东西给用户而不是空白!

最后,这里是原文随便翻译的,如果有什么不对的还望指出,自己就当学习笔记记录下来。

Android启动页面的正确打开方式 (转载)的更多相关文章

  1. React-Native 之 GD (十)Android启动页面 及 模态方式跳转

    1.Android启动页面 思路:新建一个组件作为 Android 的启动页,index.android.js 的初始化窗口改为 Android启动页,设置定时器,使其在1.5秒后自动跳转到 Main ...

  2. Xcode 的正确打开方式——Debugging(转载)

    Xcode 的正确打开方式——Debugging   程序员日常开发中有大量时间都会花费在 debug 上,从事 iOS 开发不可避免地需要使用 Xcode.这篇博客就主要介绍了 Xcode 中几种能 ...

  3. C#语法——泛型的多种应用 C#语法——await与async的正确打开方式 C#线程安全使用(五) C#语法——元组类型 好好耕耘 redis和memcached的区别

    C#语法——泛型的多种应用   本篇文章主要介绍泛型的应用. 泛型是.NET Framework 2.0 版类库就已经提供的语法,主要用于提高代码的可重用性.类型安全性和效率. 泛型的定义 下面定义了 ...

  4. InnoDB缓冲池预加载在MySQL 5.7中的正确打开方式

    InnoDB缓冲池预加载在MySQL 5.7中的正确打开方式 https://mp.weixin.qq.com/s/HGa_90XvC22anabiBF8AbQ 在这篇文章里,我将讨论在MySQL 5 ...

  5. C++11随机数的正确打开方式

    C++11随机数的正确打开方式 在C++11之前,现有的随机数函数都存在一个问题:在利用循环多次获取随机数时,如果程序运行过快或者使用了多线程等方法,srand((unsigned)time(null ...

  6. 【分享】WeX5的正确打开方式(6)——数据组件初探

    本文是[WeX5的正确打开方式]系列的第6篇文章,简单介绍一下WeX5中数据组件的特性和结构形式. 数据组件的由来 上一篇 WeX5绑定机制我们实现了一个简单的记账本应用,当时所有数据都用 JSON ...

  7. (一)Redis for Windows正确打开方式

    目录 (一)Redis for Windows正确打开方式 (二)Redis for 阿里云公网连接 (三)Redis for StackExchange.Redis 下载地址 官网.中文网1 及 中 ...

  8. List的remove()方法的三种正确打开方式

    转: java编程:List的remove()方法的三种正确打开方式! 2018年08月12日 16:26:13 Aries9986 阅读数 2728更多 分类专栏: leetcode刷题   版权声 ...

  9. Pull Request的正确打开方式(如何在GitHub上贡献开源项目)

    Pull Request的正确打开方式(如何在GitHub上贡献开源项目) GitHub的官方帮助如下: Fork A Repo: https://help.github.com/articles/f ...

随机推荐

  1. What is libacl.so.1 ?

    Google says, "This package contains the libacl.so dynamic library which contains the POSIX 1003 ...

  2. 万能模拟器eve-ng介绍

    作为一名网络工程师,通过模拟器来搭建实验环境是必不可少的,主流的网络模拟器有如下几款:Packet Tracer是思科公司出的一款模拟器,只能模拟思科自己的设备,由于此款软件是纯软件模拟,所以思科设备 ...

  3. java 中的 Math.round(-1.5) 等于多少?(未完成)

    java 中的 Math.round(-1.5) 等于多少?(未完成)

  4. docker: Error response from daemon: invalid mount config for type "bind": bind source path does not exist: /tmp/tfserving/

    注意要是当前的完整路径 pwd查看到完整路径,再加入到source里面即可

  5. Python 读取txt文件,排序并写回文件

    # 'C:\Users\SAM\Desktop\数据竞赛\个人征信_1108\个人征信\train\bank_detail_train.txt'# 反斜杠的写法会报编码错误f=open('C:/Use ...

  6. 【转载】解决繁体、日文游戏乱码的五种方法 转载自:http://tieba.baidu.com/p/488627981

    方法1:转换区域 开始——设置——控制面板——区域和语言选项——分别选择“高级”和“区域选项”标签——在其下拉框中都选择“日语”(或“日本”)(选项有点多,慢慢找)——重启后即可生效. *某影注:日语 ...

  7. Java 正则表达式获取两个字符中间的内容

    利用 正则表达式 获取两个字符串中间的值 直接上代码吧,不是很难. public static void main(String[] args) { // 内容 String value = &quo ...

  8. 初入SG-UAP

    初入SG-UAP SpriderMan 关注 2019.06.19 14:10 字数 1130 阅读 10评论 0喜欢 0 初次接触SG-UAP,将自己的见解以文字形式记录下来,希望能对初入的伙伴们有 ...

  9. Unknown property 'mybatis-plus'

    包名和配置文件路径必须一样 并且

  10. webstorm 格式化代码及常用快捷键 Option+Command+l

    mac 下 webstorm 格式化代码的快捷键 Option+Command+l