App三种启动场景:冷启动、热启动、温启动【杭州多测师_王sir】【杭州多测师】

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

第一阶段:
1、加载并启动app;
2、app启动后,第一时间为app显示一个空白的window;
3、创建app进程
4、第二阶段:
5、系统一旦创建了app进程,app进程就要负责做以下的任务:

创建app对象;
1、启动主进程ActivityThread;
2、创建MainActivity;
3、渲染视图;
4、执行onLayout;
5、执行onDraw
6、完成第一次绘制后,把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重建,原响应消失的情况,可以进行某些恢复处理。

 

posted @ 2022-09-13 18:30  多测师_树哥  阅读(567)  评论(1编辑  收藏  举报