微信小程序> 如何让安卓APP一直在后台运行-如何设置微信一直运行-微信小程序后台运行

如何让安卓APP一直在后台运行-如何设置微信一直运行-微信小程序后台运行

浏览量:6591 时间: 来源:蔺飞飞
本文摘自微信公众号“android高心星的私塾”一声明1网上很多的保活手段,但是不靠谱的居多2本文只是进行保活知识的推广,不是在教你做永生不死的进程二保活手段1业界保活手段:黑色保活,灰色保活,白色保活2黑色保活:1不同的APP进程,用广播相互唤醒,包括利用系统广播进行唤醒2常见手段:1开机,网络切换,拍照,拍视频等利用系统广播唤醒APP此场景Google已经意识到,在AndroidN取消了拍照,视频,网络切换的广播2接入第三方的SDK也会唤醒相应的APP进程3假如你手机里装了支付宝,淘宝,UC等阿里系的APP,那么你打开任何一个,都有可能唤醒其他的阿里系的APP3白色保活:就是调用系统的API启动一个前台Service进程,这样会在通知栏生成一个Notification,用户知道哪些进程正在运行4灰色保活1保活领域应用最为广泛,利用系统的漏洞来启动一个前台的Service进程,与“白色保活”不同的是,它不会在通知栏生成一个Notification,用户无法察觉,但是优先级要高于普通的后台进程。2实现思路思路一:当API18,启动前台的Service直接传入newNotification();思路二:当API18,同时启动两个id相同的前台Service,然后再将后启动的Service做stop处理代码这样写:importandroid.app.Notification;importandroid.app.Service;importandroid.content.Intent;importandroid.os.Build;importandroid.os.IBinder;/***APP灰色保活*Createdbyfflinon2016/4/23.*/publicclassGrayServiceextendsService{privatefinalstaticintGRAY_SERVICE_ID1001;@OverridepublicIBinderonBind(Intentintent){returnnull;}@OverridepublicintonStartCommand(Intentintent,intflags,intstartId){//API18,此方法能有效地隐藏notification的图标if(Build.VERSION.SDK_INT18){startForeground(GRAY_SERVICE_ID,newNotification());}else{Intentintent1newIntent(this,GrayInnerService.class);startService(intent1);startForeground(GRAY_SERVICE_ID,newNotification());}returnsuper.onStartCommand(intent,flags,startId);}//给API18的平台上做灰色保护手段publicclassGrayInnerServiceextendsService{@OverridepublicIBinderonBind(Intentintent){returnnull;}@OverridepublicintonStartCommand(Intentintent,intflags,intstartId){startForeground(GRAY_SERVICE_ID,newNotification());stopForeground(true);stopSelf();returnsuper.onStartCommand(intent,flags,startId);}}}3检验方法:首先看系统通知栏有没有Notification,如果没有,就进入手机adbshell模式,输入命令dumpsysactivityservicesPackageName打印出指定包名的所有进程中的service信息,看下有没有isForgroundtrue的信息,如果有,就说明了该APP使用了灰色保活4使用灰色保活手段并不意味着你的应用就能永生不死,只能说提高了进程的优先级,如果应用占用了很大的内存,还是会被回收的三进一步理解保活1进程回收机制系统出于体验和性能上的考虑,APP在退出后台时系统并不会真正的kill掉这个进程,而是将其缓存起来,打开的应用越多,后台缓存的进程也就越多。在系统内存不足的情况下,系统开始根据自身的一套进程回收机制来判断要回收掉哪些进程,这套杀死进程回收内存的机制叫LowMemoryKiller,它是基于Linux内核的OOMkiller机制诞生的,该机制为每个系统分配了一个值,叫做oom_adj,代表了进程的优先级,oom_adj越大,代表优先级越低,越容易被回收,普通APP进程的oom_adj0,系统的可能会小于0.2查看oom_adj的值,需要用到两个shell命令ps|grep包名$cat/proc/进程id/oom_adj3结果发现,APP推到后台,UI进程的值降低最为明显,因为它占用的内存资源最多,因此,为了避免后台UI进程被杀,需要尽可能的释放一些不用的图片,音频资源

版权声明

即速应用倡导尊重与保护知识产权。如发现本站文章存在版权问题,烦请提供版权疑问、身份证明、版权证明、联系方式等发邮件至197452366@qq.com ,我们将及时处理。本站文章仅作分享交流用途,作者观点不等同于即速应用观点。用户与作者的任何交易与本站无关,请知悉。

产品经理

手机 : 13312967497

擅长 : 小程序流量变现

扫码领取礼包

最新资讯

热门模板

  • 头条
  • 搜狐
  • 微博
  • 百家
  • 一点资讯
  • 知乎