美文网首页Android进阶之路Android开发经验谈Android技术知识
App 冷启动缓慢出现白屏之终极解决方案 — IntentSer

App 冷启动缓慢出现白屏之终极解决方案 — IntentSer

作者: cff70524f5cf | 来源:发表于2019-09-27 21:15 被阅读0次

什么叫做冷启动

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

特点

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

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

热启动

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

特点

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

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

为什么会出现白屏现象

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

  • 在一个Activity打开时,如果该Activity所属的Application还没有启动,那么系统会为这个Activity创建一个进程

  • 每创建一个进程都会调用一次Application,所以Application的onCreate()方法可能会被调用多次

  • 在进程的创建和初始化中,势必会消耗一些时间,在这个时间里,WindowManager会先加载APP里的主题样式里的窗口背景(windowBackground)作为预览元素,然后才去真正的加载布局

  • 如果这个时间过长,而默认的背景又是黑色或者白色,这样会给用户造成一种错觉,这个APP很卡,很不流畅,自然也影响了用户体验。

效果图对比较:

启动过长出现白屏效果:

利用IntentService优化后的效果:

[图片上传失败...(image-c0d02f-1569589200786)]

<figcaption>利用IntentService优化后的效果</figcaption>

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

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

MyIntentService:

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

:

相关该用例中的demo相关CSDN连接:
download.csdn.net/detail/andr…

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

  • 1、将背景图设置成我们APP的Logo图,作为APP启动的引导,现在市面上大部分的APP也是这么做的。
<style name="AppWelcome" parent="AppTheme">
        <item name="android:windowBackground">@mipmap/bg_welcome_start</item>
 </style>
  • 2、将背景颜色设置为透明色,这样当用户点击桌面APP图片的时候,并不会"立即"进入APP,而且在桌面上停留一会,其实这时候APP已经是启动的了,只是我们心机的把Theme里的windowBackground的颜色设置成透明的,强行把锅甩给了手机应用厂商(手机反应太慢了啦,哈哈),其实现在微信也是这样做的
<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,解决方案很简单:

  • 1、让其Activity集成Activity而不要集成兼容性的AppCompatActivity
  • 2、在onCreate()方法里的super.onCreate(savedInstanceState)之前设置我们原来APP的Theme
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有以下特点:

  • 它创建了一个独立的工作线程来处理所有的通过onStartCommand()传递给服务的intents。

  • 创建了一个工作队列,来逐个发送intent给onHandleIntent()。

  • 不需要主动调用stopSelft()来结束服务。因为,在所有的intent被处理完后,系统会自动关闭服务。

  • 默认实现的onBind()返回null

  • 默认实现的onStartCommand()的目的是将intent插入到工作队列中

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

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

  • 1、不要让Application参与业务的操作

  • 2、不要在APPlication进行耗时操作,比如有些开发者会在自己的APP里一系列文件夹或文件(比如我自己),这些I/O操作应该放到"确实该使用的时候再去创建"亦或者是数据库的一些操作。

  • 3、不要以静态变量的方式在Application中保存数据等。

好了,文章到这里就结束了,如果你觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言。一定会认真查询,修正不足。谢谢。

希望读到这的您能转发分享和关注一下我,以后还会更新技术干货,谢谢您的支持!

转发+点赞+关注,第一时间获取最新知识点

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

Android架构师之路很漫长,一起共勉吧!

以下墙裂推荐阅读!!!

相关文章

  • App 冷启动缓慢出现白屏之终极解决方案 — IntentSer

    什么叫做冷启动 第一次启动或者被用户主动杀死app进程,或者被系统主动回收掉,整个app的后台任务被清理,回到桌面...

  • Android项目优化-冷启动优化

    APP启动优化主要解决app启动缓慢,白屏半天的问题。 app启动方式主要为:冷启动和热启动 冷启动:当进程关掉,...

  • Android冷启动黑屏或者白屏解决办法

    大家可能都碰到过,APP在冷启动的时候出现黑屏或者白屏,通俗说,就是点击APP,先黑一下或者白一下,然后再加载我们...

  • App冷启动白屏处理

    1,尽量将Application中处理改为后台2,设置主题改欢迎页背景为图片或者透明

  • Android启动

    1.启动加速 2.解决Android应用冷启动时出现的白屏问题 3.十五、Android性能优化之提升应用的启动速...

  • ionic2常见问题及解决方案

    ionic2常见问题及解决方案 一、app启动白屏的问题 ​ app启动后大概有几秒的白屏,才会显...

  • Android冷启动白屏黑屏处理

    一、冷启动会有黑白屏现原因Android冷启动黑白屏现象其实是因为activity的window背景颜色二、解决办...

  • Android冷启动App白屏解析

    问题1:开发时,首次启动App白屏时间过长(长达五秒左右) 原因:AS的Instant Run需要做复杂的初始化工...

  • Android冷启动白屏解决方案

    什么是Android应用冷启动? 当启动应用时,后台没有该应用的进程,这时系统会新创建一个新的进程分配给该应用,并...

  • Android冷启动白屏解决方案

    1.什么是冷启动 冷启动其实就是应用第一次启动,或者说启动之后后台被杀掉了又重新启动app的情况.比如小米通过菜单...

网友评论

    本文标题:App 冷启动缓慢出现白屏之终极解决方案 — IntentSer

    本文链接:https://www.haomeiwen.com/subject/cwwauctx.html