App 冷启动缓慢出现白屏之终极解决方案 — IntentService 高效异步处理
2017-08-12 22:12 阅读(276)
什么叫做冷启动

第一次启动或者被用户主动杀死app进程,或者被系统主动回收掉,整个app的后台任务被清理,回到桌面再次点击app的桌面图标启动app。

特点

后台任务全部结束,再次启动

当然还有与之对应的热启动

热启动

用户点击返回键退推到桌面上,后台任务没有被杀死。再次点击桌面图标启动app

特点

未清理后台任务,再次启动

app启动时,每一个app都会至少创建一个进程出来,一些启动多线程任务的会创建出来多个进程。

为什么会出现白屏现象

首先我们要知道当打开一个Activity的时候发生了什么?

效果图对比较:

启动过长出现白屏效果:


启动过长出现白屏效果
启动过长出现白屏效果


利用IntentService优化后的效果:


利用IntentService优化后的效果
利用IntentService优化后的效果


在application里做一些耗时的一些逻辑:


耗时操作
耗时操作


利用IntentService进行帮助application逻辑相关的异步处理


application相关处理
application相关处理


MyIntentService:


MyIntentService
MyIntentService


该项目是一个关于GreenDao的一个学习案例


GreenDao的一个学习案例
GreenDao的一个学习案例
:


相关该用例中的demo相关CSDN连接:

download.csdn.net/detail/andr…

另外参考了网上的另外2种方式这里也进行总结一下.

<style name="AppWelcome" parent="AppTheme">
        <item name="android:windowBackground">@mipmap/bg_welcome_start</item>
 </style>
<style name="Appwelcome" parent="android:Theme.Translucent.NoTitleBar.Fullscreen"/>

透明化这种做法需要注意的一点,如果直接把Theme引入Activity,在运行的时候可能会出现如下异常:

java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.

这个是因为使用了不兼容的Theme,例如我这里的Activity继承了AppCompatActivity,解决方案很简单:

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {            setTheme(R.style.AppTheme);
            super.onCreate(savedInstanceState);
    }
}

最后别忘了两种方式都要在 我们都需要将Theme引入对应的Activity

 <activity
            android:name=".app.main.MainActivity"
            android:theme="@style/AppWelcome"
            android:screenOrientation="portrait">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

IntentService:异步处理服务,新开一个线程:handlerThread在线程中发消息,然后接受处理完成后,会清理线程,并且关掉服务。

IntentService有以下特点:

这次主要是针对于APP第一次启动过长 出现白屏的解决方案.

如何避免app启动时间过长呢?

另外性能分析工具请参考:

BlockCannery-一个强大的Android程序调试工具,轻松帮你找出卡顿

性能优化篇:

Android性能优化 (1)—— 内存溢出和内存泄漏的介绍

相信自己,没有做不到的,只有想不到的


作者:codegoogle