安卓应用重启时偶发性退出,结合Activity与Service生命周期的解读和总结

本文探讨了安卓应用在升级重启时偶发性退出的问题,重点分析了Activity和Service的生命周期。在某些情况下,Activity的finish()方法和System.exit(0)的不当使用可能导致应用意外退出。解决方案是理解和正确处理Activity的生命周期,特别是在onStop()方法中避免立即结束进程,以确保应用重启的顺利进行。
摘要由CSDN通过智能技术生成

  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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值