Android 启动优化


android 启动优化

Material Design 启动屏幕

  • 问题1:点击应用图标后等待时间较长
    原因:在应用第一次启动(系统杀掉应用的进程的时候)到Activity的onCreate需要一段时间,具体的流程如下
    开始加载并启动应用;
    应用启动后,显示一个空白的启动窗口;
    创建应用进程信息;

初始化应用中的对象 (比如 Application 中的工作);
启动主线程 (UI 线程) ;
创建第一个 Activity;
加载内容视图 (Inflating) ;
计算视图在屏幕上的位置排版 (Laying out);
绘制视图 (draw)。

  • 问题2:进入启动页前会先白屏一下
    消灭白屏的做法 在主题中设置透明即可
    白屏跟主题的设置有关,也有可能是黑色的。
    例如:
    

对于上面的两个问题具体的优化方式

根据Material Design 设计规范中讲到的 启动屏进行了如下优化:

  • 首先定义一个drawable 用于设置主题背景(android:windowBackground)
<?xml version="1.0" encoding="utf-8"?><layer-list    android:opacity="opaque"    xmlns:android="http://schemas.android.com/apk/res/android">        <item android:drawable="@color/colorPrimaryDark"/>                                     <item >        <bitmap android:src="@drawable/splash_icon"            android:gravity="center"/>    item>layer-list>

的相关设置可以参考官方说明,layer_list


示例代码:

<?xml version="1.0" encoding="utf-8"?><layer-list xmlns:android="http://schemas.android.com/apk/res/android">    <item>      <bitmap android:src="@drawable/android_red"        android:gravity="center" />    item>    <item android:top="10dp" android:left="10dp">      <bitmap android:src="@drawable/android_green"        android:gravity="center" />    item>    <item android:top="20dp" android:left="20dp">      <bitmap android:src="@drawable/android_blue"        android:gravity="center" />    item>layer-list>

这里要注意的地方

默认情况下,所有可绘制项都会缩放以适应包含视图的大小。因此,将图像放在图层列表中的不同位置可能会增大视图的大小,并且有些图像会相应地缩放。为避免缩放列表中的项目,请在 < item> 元素内使用 < bitmap> 元素指定可绘制对象,并且对某些不缩放的项目(例如 “center”)定义重力。例如,以下 < item> 定义缩放以适应其容器视图的项目:

<item android:drawable="@drawable/image" />

为避免缩放,以下示例使用重力居中的 元素:

<item>  <bitmap android:src="@drawable/image"          android:gravity="center" />item>
  • 添加splash主题
    
  • 在manifest 中进行设置(注意这里不是在application的标签中设置主题,因为我们只要第一个activity启动的时候有这个效果就可以了)
  <activity android:name=".MainActivity"        android:label="@string/app_name"        android:theme="@style/splash"        android:configChanges="orientation|keyboardHidden|screenSize|screenLayout">            <intent-filter>                <action android:name="android.intent.action.MAIN"/>                <category android:name="android.intent.category.LAUNCHER"/>            intent-filter>        activity>
  • 启动完成运行到Activity 中的 onCreate 的时候再将主题改回来(setTheme())
@Override    protected void onCreate(Bundle savedInstanceState) {        setTheme(R.style.AppTheme_NoActionBar);        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);}

关注微信公众号,每天都有优质技术文章,搞笑GIF图片推送哦。

更多相关文章

  1. [Android开发实战]Android添加快捷方式到桌面的两种方式
  2. Android(安卓)启动Service监听网络状态
  3. Android程序开机启动&&监听情景模式切换
  4. Android(安卓)启动优化(一)
  5. Android应用程序组件概述
  6. android启动过程及各个镜像间的关系
  7. 说说在 Android(安卓)中如何压缩图片
  8. Android(安卓)9.0 系统启动流程
  9. Android中Activity之间的数据传递和Intent使用

随机推荐

  1. mysql优化器追踪示例
  2. 表单和CSS选择器的案例
  3. 伪类选择器+盒模型+icon的使用方法+百分
  4. 简单的3行3列布局和固定定位
  5. 7/30号作业
  6. 在线QQ客服的固定定位以及三行三列的定位
  7. 字体图标的使用和盒模型的理解与box-sizi
  8. QQ在线客服,定位布局
  9. 固定定位及传统三行三列布局练习
  10. 0630作业