ps:在开始之前,我想扯一下关于智商和情商与个人发展的问题,因为之前听到不少人说。在我的理解,如果你是一个刚刚毕业的软件类学生,那么你还是不要表现得像情场老手,而是一心去做东西学技术的好,因为第一很多程序员都不怎么喜欢表现得太聪明及太会说话而实力一般的人,第二对于现在的你来说智商就是通往后期的门票。而情商,其实就是在你实力可以的时候让你走的更远的必要条件了。
ps:我要开始带新来的小伙伴了,吗?一想到一年前我对安卓的陌生,其实我既兴奋终于可以卖弄又是想拒绝带新人。。。
ps:人生中有不少东西不能放弃,其实面对爱情的时候,作为软件猴子,在失望、伤心、或者无力的时候,也只有音乐、代码、游戏陪伴,这大概是最悲伤的故事了。
问题:
哈哈,切入正题,最近交送的项目发现了一些BUG,应该是之前编码及项目整合的时候遗留的问题。首当其冲的就是应用的升级重启会偶然性的失败!。升级模块是远程service(Android AIDL)进行实现,这样的好处是升级模块与该应用处于不同的进程,即使升级模块出现了BUG也不会导致整个应用进程崩溃,之后会写一篇文章具体总结一下Android AIDL。
知识梳理:
- 顺便粗略提一下安卓的启动流程(Linux层):从Boot Loader开始到init进程再到Zygote Java进程,由Zygote Java进程产生安卓层中的进程运行。(这里我也只是知道大概的过程,具体的要等多年以后再研究了)
- Activity的生命周期直接由ActivityManagerService管理,由于硬件限制,在之前做一个定制系统的应用时修改过它对个别应用的处理(只是发了个广播,更改了系统的service,jar,而要是写C++层守护进程浪费资源)。有兴趣的可以看一看它管理Activity的实现和过程。到总体的流程如下图所示:
- 这里提一下Activity的生命周期和Service的生命周期的不同,Service的生命周期如下图:
- 通过StartService()方法启动Service时,生命周期如上图左分支,会执行onStartCommand(Intent intent, int flags, int startId),它会在onCreate()之后,onStart()之前运行(PS:The method onStart(Intent, int) from the type Service is deprecated),在这个onStartCommand里面可以设置你的Service的状态为各种级别的服务(例如设置成前台服务,以降低它在极端情况下(内存不足等)被kill的概率)。以下是例子以及注释解释:
@Override
public int onStartComm