冷启动和热启动的区别android,app冷启动和热启动的区别(详解两者定义及区别)…

冷启动和热启动的区别android,app冷启动和热启动的区别(详解两者定义及区别)…介绍一下 app 冷启动和热启动方式来实现 app 秒开的效果 那么 先来看看什么叫冷启动和热启动 冷启动 指 app 被后台杀死后 在这个状态打开 app 这种启动方式叫做冷启动 热启动 指 app 没有被后台杀死 仍然在后台运行 通常我们再次去打开这个 app 这种启动方式叫热启动 那么 何为闪屏页呢 这个大家一般都知道 我们 app 也非常常见的 比如微信 等等应用 你将这些应用清除掉

介绍一下 app 冷启动和热启动方式来实现 app 秒开的效果。那么,先来看看什么叫冷启动和热启动。

冷启动:指 app 被后台杀死后,在这个状态打开 app,这种启动方式叫做冷启动。

热启动:指 app 没有被后台杀死,仍然在后台运行,通常我们再次去打开这个 app,这种启动方式叫热启动。

那么,何为闪屏页呢?这个大家一般都知道,我们 app 也非常常见的。比如微信、 等等应用,你将这些应用清除掉它们的后台运行的情况下,再去打开。这时候会出现一个闪屏页,类似我们的背景页。这个页面停留的时间非常短,一般不会超过 3秒,太久了就会使用户感觉这个 app 好卡的样子。

然后,我们看新建的一个项目,不做任何操作运行时会发现它在启动之时会有一个白屏的时间。那么,大部分 app 的解决方式就是我上面提到的闪屏页来替换白屏页。其实,也就是替换默认的 activity 的 theme。我们看看白屏的效果(其实在我点下的瞬间,已经是白屏了。模拟器也许屏蔽了,在手机上非常直观)

白屏效果

52bd532384b225b804229b38871e047f.png

为什么替换?这就是提升我们的用户体验了,可以发现我们白屏页显得非常的难看,而且用户可能会误以为这是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通常是用于后台处理比较重要的,比如后台接收信息,音乐播放器后台播放,通常都是屏蔽了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也可以很好的说明它们的执行顺序,成功的印证我们的思路是正确的。

52bd532384b225b804229b38871e047f.png

这样的话,我们可以在启动 splash 页面加载一下库,然后加载完成后,进入主页面,由于资源都初始化好了,自然用起来就快一点,效果图:

52bd532384b225b804229b38871e047f.png

这里我们点击桌面图标时,一启动的就是我们的 splash 的一张图,而不是白茫茫的背景了,看起来舒服了许多。

微信公众号搜索:(jiuwenwang)联系客服!

52bd532384b225b804229b38871e047f.png

本文原创版权为好易家网所有,如未经授权,不得转载。如若转载,请注明本文地址:http://www.hyj999.com/n/21008.html

如若内容造成侵权/违法违规/事实不符,请联系好易家网进行投诉反馈,一经查实,立刻删除!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/217048.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 上午10:28
下一篇 2026年3月18日 上午10:28


相关推荐

  • Module build failed (from ./node_modules/eslint-loader/index.js)

    Module build failed (from ./node_modules/eslint-loader/index.js)错误信息:D:\study\vue\vuesaxvuejs-210\vuesaxvuejs-210>npmrunserve>vuesax-vuejs-dashboard-admin-template@2.1.0serveD:\study\vue\vuesaxvuejs-210\vuesaxvuejs-210>vue-cli-serviceserveI…

    2022年6月18日
    36
  • 深度解析:Agent、MCP、大模型之间的区别和联系

    深度解析:Agent、MCP、大模型之间的区别和联系

    2026年3月15日
    3
  • pycharm 撤销操作,还原撤销快捷键

    pycharm 撤销操作,还原撤销快捷键使用 pycharm 时 如果想把代码撤销到之前的状态可以用 Ctrl z 如果不小心撤销多了 可以用 Ctrl Shift Z 还原 别傻傻的重新敲了

    2026年3月27日
    2
  • 实验设备管理系统C语言_实验室设备管理系统代码

    实验设备管理系统C语言_实验室设备管理系统代码这里写目录标题实验室设备管理系统题目要求源代码运行结果实验室设备管理系统题目要求实验设备管理系统设计实验设备信息包括:设备编号,设备种类(如:微机、打印机、扫描仪等等),设备名称,设备价格,设备购入日期,是否报废,报废日期等。主要功能:(1)能够完成对设备的录入和修改(2)对设备进行分类统计(3)设备的破损耗费和遗损处理(4)设备的查询要求:使用文件方式存储数据。源代码#define_CRT_SECURE_NO_WARNINGS#include<stdio.h>#i

    2022年10月13日
    5
  • DotNetBar布局(一)

    DotNetBar布局(一)相信大家搞 NET 桌面程序开发都会用到一些界面布局的组件 常用的由 DotNetBar 和 devexpress 今天主要将 DotNetBar 在项目中布局简单介绍一下 个人感觉这个控件还是有很多 bug 的 不知道什么时候就出现莫名奇妙的排版问题错误 比如突然在设计视图 DotNetBar 控件不能编辑了 又或者突然运行时界面布局是正确的 但是设计视图中控件位置或者属性发生莫名奇妙的变化 又或者由于电脑分辨率的

    2026年3月19日
    2
  • python中如何输入派_用phython语言求圆周率

    python中如何输入派_用phython语言求圆周率关于完全弹性碰撞和圆周率的关系所设计的易语言程序.版本2.程序集窗口程序集_启动窗口.程序集变量n,整数型.程序集变量m1,整数型.程序集变量m2,整数型.程序集变量v1,小数型.程序集变量v2,小数型.程序集变量v11,小数型.程序集变量v22,小数型.子程序_按钮1_被单击n=0m1=到数值(编辑框1.内容)m2=1v1=-1v2=0.判…

    2025年9月2日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号