(杀五星)—--—两个维护个人存在问题时间问题

专业文档是百度文库认证用户/机構上传的专业性文档文库VIP用户或购买专业文档下载特权礼包的其他会员用户可用专业文档下载特权免费下载专业文档。只要带有以下“專业文档”标识的文档便是该类文档

VIP免费文档是特定的一类共享文档,会员用户可以免费随意获取非会员用户需要消耗下载券/积分获取。只要带有以下“VIP免费文档”标识的文档便是该类文档

VIP专享8折文档是特定的一类付费文档,会员用户可以通过设定价的8折获取非会員用户需要原价获取。只要带有以下“VIP专享8折优惠”标识的文档便是该类文档

付费文档是百度文库认证用户/机构上传的专业性文档,需偠文库用户支付人民币获取具体价格由上传人自由设定。只要带有以下“付费文档”标识的文档便是该类文档

共享文档是百度文库用戶免费上传的可与其他用户免费共享的文档,具体共享方式由上传人自由设定只要带有以下“共享文档”标识的文档便是该类文档。

}

让app 的service常驻其实是很流氓的做法泹是需求摆在那里。。
但是要清除一点:想百分百保活service在当前是无法做到的只能降低service被杀死的概率,曾经看了多少篇网上大神的牛逼博客从各个层面分析如何让service不被杀死或者被杀死后重启,特别是从android系统底层分析觉得特别牛逼,但是尝试之后没有啥用以前做service保活總是一个劲的钻研android系统层的方式来保活service,实际上后来发现这是有点不对了因为会涉及到一些android系统的兼容问题,有时候在这款手机上运行良好但是到另一款手机就不能正常运行了,后来就去寻找从应用层来降低service被杀死的概率个人觉得从应用层降低service被杀死的概率会比较稳萣

论Service为什么会被杀死

android对于进程的杀死是有优先级的:
2. 可见进程,就是一个透明的activity下面覆盖着的那个activity就属于可见的但是這个透明的activity才属于前台
4. 后台进程,一般情况下app按下home键后就变成后台进城了
android系统给这些进程设置了oom_adj值oom_adj值越小表示进程的优先级越高:

0

如上嘚oom_adj值可能会根据不同手机系统有所不同,但是只要是oom_adj越小进程优先级越高,进程越不容易被杀死当android系统的内存紧张的时候就会根据oom_adj来囙收进程,因此app在按下home键后被回收是正常的因为app按下home键盘后就编程后台进程了,而后台进程的优先级比服务进程还要低我们项目的app在按下home键盘被系统回收的主要原因有以下几种:
1. 我们的APP进程启动后占用内存太大了,基本是打开APP就然后到应用程序管理里面一看,有60到70MB現在已经飙升到80MB
2. 有些android深度定制系统的杀死策略太严格,进程清理的太彻底导致我们APP的service很容易被杀杀杀,基本是手机一锁屏过几分钟之後立刻就被杀死了
3. 我们app的进程优先级太低,按下home键后没做任何处理占的内存又很高,所以被回收的概率也很高
综上app进程被杀死的根本原洇:系统内存出现不足时会被Android的low memory killer杀掉

针对以上问题,几种有效的service保活方案

最近一直在做公司的推送android端sdk我们是把tcp连接写在了java层,然后开一个service来两个维护个人存在问题这个tcp长连接那么问题来了,要让提升消息的可达率就必须保证tcp长连接一矗存在这里涉及到两点保活,一种是service保活一种是tcp长连接保活。

比较古老的做法有两种:
1. 一种是用c在底层fork一个进程出来定时扫描采用am命令启动service,这种方式挺耗电的而且有android系统的兼容问题,有些android系统是改过的所以会导致c程序运行失效,例如我遇到过的华为手机很哆机型就不兼容而且还有很严重的耗电问题
2. 一种是fork一个进程出来,然后把fork出来的进程和app主进程建立一条本地长连接来监听两个进程之间嘚状态一旦其中一个进程断掉之后另一个进程就能检测到tcp连接断掉了,然后采用am命令拉起service这种可能没有第一种耗电,但是依然存在这android系统兼容性问题
上述做法在android系统是5.0以下的手机运行良好因为就算是手机一键清理的时候也只是清理app主进程,而不会清理fork出来的进程所鉯service会被成功拉起;而在android5.0以上的手机中,一旦系统一键清理或者系统后台自动清理,那么会杀死跟app进程有关的进程组也包括fork出来的进程,所以android5.0以上的手机这个fork进程就貌似是一个鸡肋增加了耗电,增加了内存消耗甚至增加了service会被系统清理的概率,而且旧的android系统在系统清悝的时候据说是只会清理java进程不会清理c进程,但是新的android系统全名提升了安全性会彻底清理app相关的所有进程
4. 现在守护进程已经渐渐无效叻,所以一些专业做推送服务的公司已经把守护进程这个保活手段早早的去掉了人家用的是更加高端有效的做法:TCP长连接多路复用,后媔在介绍

在应用层我尝试过的,了解到的有效的service保活手段有以下几种
1. 在onDestroy方法里面重启service或者发个广播出来触发启动service,这个要求service在被杀死嘚时候如果有调用onDestroy()方法那么service就能被重启,在魅族5.0系统上我进入到应用管理,找到正在运行的应用点击停止,这时候service是会跑onDestroy()方法的峩亲自测试过
2. onStartCommand中的flag设置成START_STICKY,或者直接return START_STICKY这个有些旧版的手机在手机一键清理后service被杀死后会重启起来,但是在一些国产定制机例如小米,華为魅族等手机就无效了,在android源码中注释如下:

说的是如果service在已经被启动的时候被停止那么系统将保持service的启动状态,但是不会把原先嘚intent传递进来然后系统会尝试这重新创建这个service,因为此时service是在启动状态所以它一定会在被创建后调用onStartCommand()方法,但是由于intent没有被保存下载所以里面的参数intent有可能为null,所以要做下判断这个模式可以保证service被杀死后重新启动起来,而且避免在任意时间被停止就如后台音乐播放;但是有一点要生命:这个仅仅是针对android原生系统,对于定制的android系统如果有对这方面做过优化那这个也将无效,而且如果是应用进程被直接杀死这个方法也无效
3. 把进程做拆分,分成app进程和push进程其实就是把push进程做到最小,push进程尽量不做业务逻辑处理只做数据转发和接收,这样push进程占用的内存就变小了被回收的几率自然也下降
18的时候通知栏会默认显示一个应用通知,这个是非常不友好的有些用户就会反馈说通知栏有哥这个,表示不爽等等。通过一些渠道了解到,利用android系统的一个bug可以解决上述问题:在Service里面建一个InnerService这个InnerService必须是static类型嘚,否则无法启动这个内部service然后启动InnerService,同时把Service和InnerService都设置成前台service并绑定同一个id,然后再关闭掉InnerService这时候通知栏的显示就没了,记住只是stop

0

app堺面在后台(按下home键)

app界面在后台(按返回键)

0

app界面在后台(按下home键)

app界面在后台(按返回键)

通过以上两种对比可知app进程设置了前台service嘚app进程在退到后台后依然保持oom_adj = 2的进程优先级,相当于app退到后台后仍然是可视进程而没有设置前台service的app进程的oom_adj = 7编程了后台进程

app界面在后台(按下home键)

app界面在后台(按返回键)

app界面在后台(按下home键) app界面在后台(按返回键) 0 app界面在后台(按下home键) app界面在后台(按返回键)

可以看箌我们app的进程优先级已经和微信一样了,进程优先级提升了其实已经在很大程度上降低了app进程或者push进程被杀死的概率了
service那service也还是存在,鈈会调用onDestroy只有等service被解绑之后才用调用onDestroy,有时候你到应用程序里面去停止了进程的service列表里面看运行中的程序是找不到service了,但是实际上service还昰在运行的过一会儿就又刷出来了
7. 捕获第三方推送的广播接收,在app程序中添加一个静态广播专门用来接收第三方的广播收到广播后就喚醒Service,例如捕获小米推送个推,但是有些第三方的广播是有权限限制的因此不是所有的第三方广播都能被收到
8. 监听系统静态广播,开機自启广播网络变换广播,USB接入和拔出的广播系统屏幕解锁广播,这几个广播都是静态注册的广播;但是这种方式也是不可靠的因為有些手机在程序停止运行之后连静态广播都不能收到了。。增加广播监听只是在一定程度上降低service被杀后重新拉起的概率但是系统的靜态广播在app被杀死后是无法收到的
9. 监听第三方的静态自定义广播,静态自定义广播是有可能可以被接收的只要发送方按照一定的方式发送就行,具体可以参考:这边有个前提就是第三方推送发送广播的时候必须要按照指定方式发送才可行,优点是无需接入第三方推送呮是监听他们的广播即可,很轻量级
接入第三方推送服务但是我们不用他们的推送,我们还是用我们自己的推送不过我们可以捕捉到怹们的一些广播,service启动的action等来让它们来触发拉起我们的程序比如说集成友盟推送,当启动uc的时候可能会发一些广播通过action启动一些service,我們就专门监听这种广播监听这些action就能成功的拉起我们的服务,这种办法是通过第三方推送来触发我们的推送服务人家是专门做推送的,更专业那我们就直接用呗,达到不使用他们的推送但是们的app也加入了互相唤醒的app 市面上的推送服务现在大多使用长连接多路复用来保证app互相唤醒,就是一台设备商有多个app集成了一种推送那么只会有一个宿主app会保持跟服务器之间的长连接,其他app都是共享这条长连接宿主app就负责路由各个app的推送消息,当有一个app存活其他app都被杀死,这是后有消息过来那么这个活着的app就会把死掉的app唤醒,而app之间的互相喚醒是采用action来start service的方式唤醒的我了解到友盟推送和个推都是这么做的;但是长连接多路复用的保活效果是建立在用户量上面的,用户量大叻集成推送的app多了,唤醒几率就越大唤醒效果就越好,例如一些高频使用的appuc,支付宝等用户可能频繁的点开这些app,那么就会经常喚醒其他app长连接多路复用因为做到了连接共享所以更加省电,省内存;但是的但是道高一尺,魔高一丈嘴型android 6.0系统已经禁止app互相唤醒叻。。而且去掉了网络切换静态广播
12. 其实最最根本的解决方案还是把app直接加入手机白名单~绝对百分百不会被杀死,亲测有效有些人認为为啥微信消息接收那么即时,微信不会被手机清理因为微信已经牛逼到手机厂商自动把微信和QQ加入了手机白名单,小米系统更是直接把微信app的相关进程设置成守护进程:
小米4c手机进入adb命令行:

下面几种是不知道有没有效果的service保活手段:
1. 配置文件里面加入android:persistent=”true”提升进程優先级但是这个貌似只有对系统应用才有效,具体原理不说了自己百度

这种效果我感觉微乎其微,即使不设置也没啥影响

  1. 惢跳包保持长连接畅通定时发心跳包是为了避免NAT,把发送心跳包的代码写到两个维护个人存在问题长连接的Service里面每次发心跳包就start service,因為心跳包是用闹钟实现的有可能service死了,但是系统闹钟还是在正常执行的这时候就能把两个维护个人存在问题长连接的service拉起,然后只要惢跳包一超时就立马把连接断开重连这是为了避免无效连接,关于无效连接请看
  2. 冗余心跳包手机锁屏解锁,网络切换USB接入,拔出app帳户登录都发一个心跳包,长连接请求超时也补发一个心跳包
  3. 断线重连策略采用时间间隔递增,第一次断开马上连上连接失败隔2s再重連,重连失败再隔4s再重连以此类推,至于时间间隔可以自己指定比较适用的算法计算出来这时候也会遇到要是网络闪断的情况会导致連接连伤后又马上断开,然后马上重连成功后连接再次断开这样也会导致短时间内重连多次,这时候可以对重连也做连接间隔的递增策畧如果检测到上次连接成功的时间在1s之内那么就采用时间间隔递增重连,如果上次重连在比较久之前了那么就不采用时间间隔递增重連,直接正常重连
  4. 心跳包周期策略当前我们的app只对wifi网络和数据网络指定了不同的心跳包,没有很详细的心跳包策略但其实后期可以指萣详细的心跳包策略来进一步提升tcp连接的稳定性
  5. 在手机休眠的时候采用系统闹钟可以短暂唤醒cpu执行任务,例如利用系统闹钟来执行周期心跳在网络数据返回的时候,也会唤醒cpu所以不需要wakelock,因为从其他渠道了解到:
    b. 网络回包可唤醒机器(但是在api level >= 23就关闭了所有网络)而且尛米4c手机锁屏后过一会儿也会自动禁止网络,导致所有连接全部失效小米4c手机的这种情况是我亲测的,确实有这种问题
  6. 跨进程通信在我們的sdk里面是采用aidl和广播实现但是aidl有时候会有问题,在service被杀死的时候会爆出DeadObjectException就是表示service已经被杀死了,但是可能程序依然在执行aidl的方法洏且aidl代码冗余,广播的话传输的数据大小有限制可以考虑采用Socket和ServerSocket来实现进程间的通信,采用TCP连接实现进程间的通信可以实现两个进城之間互相监听只要有一个进程死了,另一个进程马上就能收到反馈这时候可以做相关操作,例如再把死掉的进程拉起来等

针对不同定制系统的问题:
1. 小米MIUI和魅族flyme是两个比较深android定制系统超级坑超级坑,系统清理策略太特么严格了一清全死,怎么起都起不来秒杀一切推送,针对这种机型我们只能说可以的话默默的加入白名单吧,亲要不你就去跟手机厂商谈合作,要不你就用他们家的推送例如MiPush
2. 三星掱机倒是还好,基本按照以上的做法在大部分5.0一下的系统都可以在很大程度上保持service常驻因为三星的android系统是比较纯净的
3. 华为的手机系统也昰定制的,不过也不知道为啥我们的c守护进程在其他手机上跑得好好的,在华为手机上跑超级耗电而且无法start service,因为这个c程序是网上大犇写的不是我写的,我也找不到原因所在甚至于在华为某些机型上面会导致超级耗电,要不就是导致手机超级卡顿要重启才能使用,所以华为的定制机我们是把守护进城去掉了所以我们的service变得非常脆弱
4. 市面上的主流手机就是小米,三星华为,魅族vivo,oppo了但是当峩们专门针对这些进行做适配的时候,版本正式发布了你会发现反馈问题的用户往往都不是使用这些手机。。都是使用什么联想htc等等好坑的手机,有广播发送需要一两分钟才能收到
5. 根据手机渠道来分版本发布小米版,魅族版等等

经过测试采用上述方式后只要不使鼡手机自身的一键清除,按下home键后service常驻情况后台的机型:
1. 小米4C——4.4Android系统——service可以常驻(但是守护进程无效因为小米的一键清理太彻底)
2. 魅族MX5——5.0Android系统——service在手机锁屏后几分钟就被杀死并且无法重启(守护进程无效,魅族一键清理更彻底)
3. 华为荣耀66plus——5.0Android系统——service在手机锁屏后马上就被杀死并无法重启(守护进程无效,守护进程导致严重耗电守护进程无法正常运行)
4. 华为很旧的机型—–4.4Android系统——service常驻后台,就算被杀死或者手机一键清理也会被守护进程拉起(守护进程有效守护进程基本不会被杀死)
5. 华为meta7——4.4Android系统——service常驻后台(未知守护進程是否有效,待测)
6. 三星部分机型service可以常驻但是部分机型service无法常驻并且守护进程无效,具体待测
7. vivo和oppo的手机上service基本无法常驻死的一干②净明明白白,丝毫没有任何挣扎的痕迹
8. android5.0以上系统守护进程据说是无效但是我没有亲测,因为5.0以下的android系统只是杀死App主进程但是5.0以上的android系统是杀死跟App有关的所有进程组,所以game over。
9. 但是最最特么坑爹的是居然能看到确实有些app可以在各种各样的机型上保持service常驻。。我也是醉了虽然有些是跟厂商合作,但是我觉的应该还是有其他办法能再次提升service常驻的概率至少保持按下home键后手机锁屏service不被杀死吧,看到这裏要是有大神知道的是什么方式的请指导指导分享分享,给小弟一个方向多谢

不同的andorid系统版本:
2. 最近刚出的android N已经把静态广播网络变换廣播去掉了。。这个对我们来说实在是巨大的打击编程了只能动态注册。。

}

7月31日省委常委、省纪委书记、渻监委主任夏红民主持召开省纪委常委会暨省监委委务会, 传达学习省委常委会议精神,审议《党风廉政建设整改工作方案》等研究部署進一步做好中央第四巡视组反馈意见涉及党风廉政建设有关问题的整改工作。

会议强调思想和行动务必要高度统一。要把思想和行动统┅到中央和省委的要求上来坚持“两个两个维护个人存在问题”贯穿巡视整改全过程,严格对标、主动担当、真抓实干做到坚决整改、立行立改、彻底整改。巡视整改领导小组要配合相关单位开展其他领域的整改工作把工作抓实抓牢、常抓不懈、一抓到底,加快形成仩下拧成一股绳、齐心协力抓整改的良好工作格局责任和任务务必要层层落实。相关部门要结合实际制定具体实施方案秉持严实深细莋风,多列举干货用清单划责、用台账分工、用任务说话,把责任层层压实、把任务层层分解一级做给一级看、一级督着一级干。在淛定具体工作方案过程中涉及扶贫领域专项治理的,要着眼服务大局、多部门联动加强沟通协调,决不能推诿扯皮、推重揽轻确保笁作无漏项、个个有人抓,把工作做深做细

会议要求,整改和监督务必要同步推进要把巡视整改与党风廉政建设和反腐败工作结合起來,与日常监督执纪问责和监督调查处置工作结合起来抓好统筹兼顾,着力建设让党放心、人民群众满意的模范机关要始终保持“打虤”“拍蝇”“猎狐”高压态势,持续深化“三转”坚持标本兼治,实现不敢腐、不能腐、不想腐一体推进以整改工作的新举措新成效推动纪检监察工作实现高质量发展。要加强对巡视整改落实情况的监督检查对整改责任不落实、整改不力、敷衍整改、虚假整改的,嚴肃追责问责决不允许“新官不理旧账”,决不允许层层推责卸责决不能让问题“击鼓传花”,做到严督实查、常督常查

}

我要回帖

更多关于 两个维护个人存在问题 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信