Android 启动优化

来源:互联网 发布:mysql 表空间大小限制 编辑:程序博客网 时间:2024/05/21 15:42

第一种状态:APP启动前有白屏或者黑屏

        这种情况可能比较常见,有效的方法就是在启动页的Activity上透明的window属性。大多数的APP都会这么做,每次重新打开的时候都会等个几秒,一直展示是某个画面。

         假设这个Activity叫AcBoot,给其Activity设置theme

<activity    android:name=".AcBoot"    android:windowSoftInputMode="adjustPan|stateVisible|stateAlwaysHidden|adjustResize"    android:screenOrientation="portrait"    android:theme="@style/Translucent"    android:label="@string/app_name" >    <intent-filter>        <action android:name="android.intent.action.MAIN" />        <category android:name="android.intent.category.LAUNCHER" />    </intent-filter></activity>
style 为

<style name="Translucent">    <item name="android:windowBackground">@android:color/transparent</item>    <item name="android:colorBackgroundCacheHint">@null</item>    <item name="android:windowIsTranslucent">true</item>    <item name="android:windowNoTitle">true</item></style>
在这AcBoot中onCreate中的操作也就是做个延迟处理,比如2秒后跳转到目标页面。

因为等待的时间有两秒,这个时间也算是比较长,也不能白白浪费了。在开发的过程,有很多需要初始化的工作都放在Application中,找出其中比较耗时的操作,放在AcBoot的2秒等待里进行初始化。这样会进一步的提高启动的速度。


第二种状态:在第一种状态实现的情况下,可能不会有白屏。但是会出现,点击APP的图标后并不会立刻出现启动页的画面,会出现短暂的没有任何响应的情况。有的APP处理的就很好,比如百度贴吧,无论什么时候只要点击就会有反应。这样需要怎么做呢?

        之前的操作是给启动页的Activity加上透明的window背景。这个时候可以换个思路,既然可以填充透明的颜色,就可以填充图片试试。把原本放在启动页加载的图片设置为window的背景,在Activity中的onCreate不进行setContentView()这个操作。这时候style修改为

<style name="Translucent">    <item name="android:windowBackground">XXXX图片资源</item>    <item name="android:colorBackgroundCacheHint">@null</item>    <item name="android:windowIsTranslucent">true</item>    <item name="android:windowNoTitle">true</item></style>

总结一下,APP启动的过程是Application初始化->第一个Activity启动。android 的显示都是基于窗口,是先有窗口,再有具体的View视图。进行进一步的细分就变成了:

          Application初始化->第一个Activity窗口开始加载->第一个Activity的视图内容开始加载(对应setContentView)->有画面显示出。

这样优化点就出来了:

1.application不能做耗时操作,至少不是串行的耗时操作。

2.窗口是优先展示的,很快就有响应,根据需要设置为透明颜色或者图片

3.activity等待2s,这两秒可以利用做一些初始化工作。


 




0 0