冷启动和热启动的区别android,app冷启动和热启动的区别(详解两者定义及区别)...
介绍一下 app 冷启动和热启动方式来实现 app 秒开的效果。那么,先来看看什么叫冷启动和热启动。
冷启动:指 app 被后台杀死后,在这个状态打开 app,这种启动方式叫做冷启动。
热启动:指 app 没有被后台杀死,仍然在后台运行,通常我们再次去打开这个 app,这种启动方式叫热启动。
那么,何为闪屏页呢?这个大家一般都知道,我们 app 也非常常见的。比如微信、QQ 等等应用,你将这些应用清除掉它们的后台运行的情况下,再去打开。这时候会出现一个闪屏页,类似我们的背景页。这个页面停留的时间非常短,一般不会超过 3秒,太久了就会使用户感觉这个 app 好卡的样子。
然后,我们看新建的一个项目,不做任何操作运行时会发现它在启动之时会有一个白屏的时间。那么,大部分 app 的解决方式就是我上面提到的闪屏页来替换白屏页。其实,也就是替换默认的 activity 的 theme。我们看看白屏的效果(其实在我点下的瞬间,已经是白屏了。模拟器也许屏蔽了,在手机上非常直观)
白屏效果
为什么替换?这就是提升我们的用户体验了,可以发现我们白屏页显得非常的难看,而且用户可能会误以为这是app卡的结果造成的。如果我们换成了闪屏页,不仅可以为app添加属于自己的脸面,也可以造成一种app秒开的假象。用户发现app已经被打开了,为何迟迟不进去,那可能是觉得手机不够给力啊,哈哈。
实现步骤
我们提到秒开app,不管它是一种假象也罢,既然市面上大部分的app都是这么处理的,不妨我们也学习一下。
一、设置 style 主题
首先,我们为闪屏页设置它的style,通常它是隐藏标题栏、隐藏状态栏、全屏的,然后用一张突显app主题的背景图片来填充整个屏幕。那么,我们这样设置它:
@drawable/bg_splash_theme_leader true true
二、绑定到 Activity 上
然后,将这一主题运用到我们需要的activity上,比如我的SplashActivity:
最后,运行项目,你就会体会到什么叫做冷启动秒开应用了。我们先前的白屏页面,最终变成了一张自己的图片,即显得美观,又达到了秒开的目的,真是一举两得!
分析
注意:我们的SplashActivity不做任何初始化和设置布局,在onCreate中直接开启我们的MainActivity就行了。否则,在SplashActivity中停留过多的时间,就会出现卡在闪屏页许久才进入,我们的秒开也就变了味。
再说说我们的热启动实现方式,通常我们按下back键时,activity的生命周期会执行onStop,onDestory ——> onCreate。造成我们试图被销毁了又得重新创建。但是,我们按下home键却是不一样的,activity的生命周期会执行onStop ——>onReStart,所以热启动就是以back键替换成了home键,其实app是被置到了后台,所以当你再次点击打开app时,它会马上的启动。
但是,这类app通常是用于后台处理比较重要的,比如QQ后台接收信息,音乐播放器后台播放,通常都是屏蔽了back键,或者会有一个back键防误触操作。当然,这就得我们自己的app的自身需求了,通常做法就是将back键改为home键操作。
/** * App 热启动方式,实现应用程序秒开效果 */ @Override public void onBackPressed() { //直接返回桌面 ( Activity只执行onStop ) if (isStartHome()) { Intent intent = new Intent("android.intent.action.MAIN"); intent.addCategory("android.intent.category.HOME"); startActivity(intent); } else { super.onBackPressed();//( Activity将执行onDestory ) } }
一种优化启动的思路
这是我很久之前看到的一种思路,既然说到闪屏页,那就一并说明。它是利用EventBus,在application的创建时期不加载各种配置和各种库,而是先显示闪屏页。在闪屏页中,利用EventBus开启各种配置和库的加载(application中进行),等到这些库加载完毕后,再次利用EventBus发送事件进入主界面。
思路就是利用闪屏页的时间用于加载各种配置和库,而不是在application创建时就加载。我们看一下代码的实现方式
/** * @Created by xww. * @Creation time 2018/8/25. */ public abstract class WeatherAppclication extends Application { @Override public void onCreate() { super.onCreate(); //在此,先不加载库 EventBus.getDefault().register(this); } @Subscribe public void init(String event) { //在这里初始化一坨一坨的库 if ("initConfigurations".equals(event)) { Weather.init(this) .withApiHost("http://") .withApiKey("6439e059e16") .configure(); EventBus.getDefault().post("initSuccess"); EventBus.getDefault().unregister(this); } }}
/** * @Created by xww. * @Creation time 2018/8/25. */ public class SplashActivity extends AppCompatActivity { private static final String TAG = "SplashActivity"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); EventBus.getDefault().register(this); EventBus.getDefault().post("initConfigurations"); } @Subscribe public void startMainActivity(String event) { if ("initSuccess".equals(event)) { //在这里加载所需库完成,进入主界面 startActivity(new Intent(SplashActivity.this, WeatherActivity.class)); finish(); } } @Override protected void onDestroy() { super.onDestroy(); EventBus.getDefault().unregister(this); } /** * 屏蔽了返回键,避免在闪屏页中退出app */ @Override public void onBackPressed() { }}
我们的Log也可以很好的说明它们的执行顺序,成功的印证我们的思路是正确的。
这样的话,我们可以在启动 splash 页面加载一下库,然后加载完成后,进入主页面,由于资源都初始化好了,自然用起来就快一点,效果图:
这里我们点击桌面图标时,一启动的就是我们的 splash 的一张图,而不是白茫茫的背景了,看起来舒服了许多。
微信公众号搜索:(jiuwenwang)联系客服!
本文原创版权为好易家网所有,如未经授权,不得转载。如若转载,请注明本文地址:http://www.hyj999.com/n/21008.html
如若内容造成侵权/违法违规/事实不符,请联系好易家网进行投诉反馈,一经查实,立刻删除!
冷启动和热启动的区别android,app冷启动和热启动的区别(详解两者定义及区别)...相关推荐
- android app 热启动,app冷启动和热启动的区别(详解两者定义及区别)
介绍一下 app 冷启动和热启动方式来实现 app 秒开的效果.那么,先来看看什么叫冷启动和热启动. 冷启动:指 app 被后台杀死后,在这个状态打开 app,这种启动方式叫做冷启动. 热启动:指 a ...
- Android App Bundles相关概念及开发流程详解
本文会根据官网的介绍,结合自己的一些理解,来阐述Android App Bundles的相关概念和开发流程. 主要参考文章如下. https://developer.android.com/guide ...
- android网购功能,网购Android App购物车点击动画实现详解
在做网购APP时,很多的app在点击购物车时都有一个图片动画效果,比较形象,我目前做的项目也涉及到了,把我使用的方法做个笔记: 先看一个简单的截图: 我们在点击列表中带+号的购物车时,会有一个图片多点 ...
- android收藏功能demo,Android使用Realm数据库实现App中的收藏功能(代码详解)
前 言 App数据持久化功能是每个App必不可少的功能,而Android最常用的数据持久化方式主要有以下的五种方式: 使用SharedPreferences存储数据: 文件存储数据: SQLite数据 ...
- Android消息传递之EventBus 3.0使用详解
前言: 前面两篇不仅学习了子线程与UI主线程之间的通信方式,也学习了如何实现组件之间通信,基于前面的知识我们今天来分析一下EventBus是如何管理事件总线的,EventBus到底是不是最佳方案?学习 ...
- Android低功耗蓝牙(BLE)使用详解
代码地址如下: http://www.demodashi.com/demo/13390.html 与普通蓝牙相比,低功耗蓝牙显著降低了能量消耗,允许Android应用程序与具有更严格电源要求的BLE设 ...
- Android 8.0学习(32)---Android 8.0源码目录结构详解
Android 8.0源码目录结构详解 android的移植按如下流程: (1)android linux 内核的普通驱动移植,让内核可以在目标平台上运行起来. (2)正确挂载文件系统 ...
- Android 各大厂面试题汇总与详解(持续更新)
介绍 目前网络中出现了好多各种面试题的汇总,有真实的也有虚假的,所以今年我将会汇总各大公司面试比较常见的问题,逐一进行解答.会一直集成,也会收集大家提供的面试题,如有错误,请大家指出,经过排查存在,会 ...
- android组件用法说明,Android第三方控件PhotoView使用方法详解
Android第三方控件PhotoView使用方法详解 发布时间:2020-10-21 15:06:09 来源:脚本之家 阅读:74 作者:zhaihaohao1 PhotoView的简介: 这是一个 ...
最新文章
- Ztree节点增加删除修改和Icheck的用法
- libtorchWindows中的使用
- feign调用如何传递token_feign加入熔断器之后转发不了token等header信息
- Hbase(2)——基础语句(2)
- 使用 Wireshark 对本地 socket 通信进行数据抓包
- kali linux解密栅栏密码,最详细bugku加密小白解法---持续更新!
- ios wkweb设置图片_iOS WKWebView的使用
- python time timeit_python运行时间计算之timeit
- 追新求快的时代,别让 Java Web 开发必备工具 Tomcat 变成“熟悉的陌生人”!
- 十种经典运放电路分析
- unity 弹痕_Unity C# 用图片融合做弹孔
- 使用华为云Linux宝塔面板搭建网站+遇到的报错解决
- android各个版本的新特性
- C语言单元测试框架——CUnit
- 学软件测试英语差,学习软件测试常见问题:英语不好可以学会软件测试吗?
- 基于物联网的室内环境检测云系统设计(树莓派RPI、Arduino、智能家居、RFID、APP)
- 好记性不如烂笔头之 App widgets(二)
- svn - 冲突及解决方案
- 主流P2P免费网络电视软件横向评测!
- unity 常用的设计模式