![android进程从创建到被销毁全过程 android进程从创建到被销毁全过程](https://i-blog.csdnimg.cn/blog_migrate/47becab035172831416427af072957ce.jpeg) |
进程从创建到被销毁全过程
|
一个进程创建时系统会为它创建一个Activity(活动),紧接着调用onCreate(),onCreate()中主要是进行一些初始化,例如读取XML资源文件创建布局,设置主界面各种监听函数等等,每个进程都会调用onCreate()。
接着是onStart(),需要说明的是,在默认 Activity中(就是程序一启动我们看到的那个Activity实体),程序员在写代码的时候并不需要显式去调用onStart(),系统会默默帮你调用;但是,当你需要在这个程序中创建除了默认Activity以外的所有新Activity的时候,你必须显式调用这个onStart(),这个 onStart()有个新名字叫做startActivity(intent),这里的intent表示一个意图,就是我们想创建的新Activity。
然后是onResume(),当我们从主程序界面跳到别的地方再跳回来的时候调用onResume()。然后程序就跑起来了,我们叫他进程 A,如果这个时候其他进程变成了前端进程(进程B),此时进程A就会调用onPause(),这会保存进程的状态做数据持久化。这时候有两种情况,进程A 再次成为前端进程,于是进程A调用onResume()来恢复运行;如果在进程A处于onPause()这段时间内系统内存不足了,进程A就有可能被销毁,来为别的进程腾出内存(为什么是“可能”被销毁?详见上面的android进程重要性层次说明),如果用户再次切换到进程A,这是系统只是重新创建一个进程,它不再是进程A了(因为此时进程A已经被销毁了)。
当onPause()被调用以后用户按了返回键(back),那进程A会调用 onStop(),之前说了用户此时已经没有和进程A交互的愿望了,所以进程A成为了“待销毁”的对象(为什么没有直接销毁呢?答案还是在android 进程重要性层次说明)。那么如果在一个进程A还没有被销毁的时刻用户再次切换到进程A,进程A又成为了前端进程,此时进程A会调用 onRestart(),进而调用onStart()来再次开始进程(此时重新开始的还是进程A本身,没有换成其他的,因为进程A还未被销毁),在这里可以理解成把进程A“唤醒”了。如果很不幸,系统内存又不足了,调用了onStop()后的进程A可能再次被销毁,就像图上画的那样,这里不再赘述。至于 onStop()后面的onDestroy()调用是在系统内存不足的时候由系统调用来销毁进程和释放内存的。