App三种启动场景:冷启动、热启动、温启动

1、冷启动(App进程创建)

系统不存在App进程(APP首次启动或APP被完全杀死)时启动APP
此时,APP的启动将经历两个阶段:

第一阶段:

  1. 加载并启动app;
  2. app启动后,第一时间为app显示一个空白的window;
  3. 创建app进程

第二阶段:

系统一旦创建了app进程,app进程就要负责做以下的任务:

  1. 创建app对象;
  2. 启动主进程ActivityThread;
  3. 创建MainActivity;
  4. 渲染视图;
  5. 执行onLayout;
  6. 执行onDraw
  7. 完成第一次绘制后,把mainActivity替换已经展示的BackgroundWindow,即空白window。

2、热启动(Activity已创建,从后台到前台)

当我们按了Home键或其它情况app被切换到后台,再次启动app的过程。
热启动时,系统将activity带回前台。如果应用程序的所有activity存在内存中,则应用程序可以避免重复对象初始化、渲染、绘制操作。
如果由于内存不足导致对象被回收,则需要在热启动时重建对象,此时与冷启动时将界面显示到手机屏幕上一样。

3、温启动(App进程存在,但Activity结束)

温启动包含了冷启动的一些操作,由于app进程依然在,温启动只执行冷启动的第二阶段,这代表着它比热启动有更多的开销。

温启动有很多场景,例如:

  • 用户按连续按返回退出了app,然后重新启动app;
  • 由于系统收回了app的内存,然后重新启动app。

关于直接杀死进程
这里我们应该很好去理解,Android中的每一个App都是运行在自己VM实例之中(沙盒)。每一个VM实例在linux中又是一个单独的进程,通过任务管理杀掉一个进程,那么对应进程里面的数据全部被回收掉。

关于返回键退出
通过对源码的追溯,如果不对onBackPressed()做特殊的处理,无论是AppCompatActivity还是android.app.Activity,发现都会通过执行onBackPressed(),最后到Activity的finish()方法,也就是说当App退出到根的时候,最终只是执行的是当前App根Activity的finish()方法,整个App“依然在运行”,只是看不到界面了,那么也就是说,如果在App中运行的Service之类的后台任务并没结束,仍然在运行。

4、开发小Tips

我们可以在APP的Application中去监听到某些信息进行判断是怎么样的启动方式,某些需求在极端情况下会出现在后台响应,但此时Activity被回收,用户响应反馈后进入APP发现Activity重建,原响应消失的情况,可以进行某些恢复处理。

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值