Android 使用MarsDaemon进程常驻

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 使用MarsDaemon进程常驻相关的知识,希望对你有一定的参考价值。

参考技术A

在特定的业务场景中,我们可能会需要app在后台做一些事情,比如上传数据之类的操作,并且希望这种操作及时在程序退出之后依然可以继续进行。因此也就理所当然的想到了使用Service进行处理。 但是 ,在特定条件(app进入后台+设备内存不足+进程占用的内存足够大)的情况下,Service会非常容易在几分钟内被系统干掉,因此提高Service的存活率至关重要。

此方法企图利用Service是生命周期去调用其本身,事实证明这种方法是无效的,在进程被杀死时,Service根本不会执行onDestroy就被直接清出内存了,因此靠自身的力量提高存活率的方式也就不可行了。

导入项目之后

之后不要忘记导入module

此处将process1作为主要进程,process2作为守护进程。MainService中执行主要的业务逻辑,Receiver1、GuardService、Receiver2都是额外创建的,里面不要做任何事情,都是空实现就好。

由于我们的Application一般都会集成其他的Application,因此需要在attachBaseContext中初始化DaemonClient,然后调用onAttachBaseContext即可实现

使用Marsdaemon提高Service存活率的方式虽然有一定效果,但是在android5.0之后的版本中,并不可靠,并且还有如下几个缺陷。

因此,Marsdaemon不应是大家频繁使用的功能,特殊情况下可以应急即可。

常驻进程内存优化开机5分钟后常驻进程(Persistent)占用内存大小≤xxxMB,不达标

一、测试步骤:

【预置条件】手机刷机后过完开机向导,连接adb后重启手机

【操作步骤】

1.手机刷机后过完开机向导,连接adb后重启手机

2.开机等待5分钟后通过:adb shell dumpsys meminfo命令查看(若无法直接查看到ufree RAM值则使用:adb shell cat proc/meminfo)

3.内存查看ufree RAM值(内存ufree RAM值=MemFree+Buffers+Cached)

4.常驻进程查看Persistent值

二、分析方法简述:

2.1需求梳理:

需要按照内外部需求或标准完成常驻进程清理要求,针对mtk平台,需要提前清理一些mtk的常驻进程。如下:

28293 kB: com.mediatek.voicecommand (pid 1621)6799 kB: com.mediatek.voiceextension (pid 1863)

2.2什么是常驻进程

Android的常驻进程,就是需要让进程在内存中一直存在,处于保活状态,不能被杀死。

使用场景:

锁屏应用,必须在进程中接收锁屏的广播,因此需要保证进程常驻;

微信、QQ接收消息,为了消息的及时性,需要保证此进程存活。

2.3如何查看常驻进程

可以使用adb shell dumpsys meminfo去查看进程内存情况

查看Persistent此项的进程:

134,167K: Persistent

         66,518K: com.android.systemui (pid 1083)

         28,154K: com.android.phone (pid 1190)

         13,121K: com.mediatek.ims (pid 1173)

         10,792K: com.factory.mmigroup (pid 1637)

          5,783K: com.factory.runintestii (pid 1672)

          5,749K: com.wingtech.stability (pid 1657)

          4,050K: org.simalliance.openmobileapi.service:remote (pid 1643)

2.4 处理手法

针对应用进行逐个排查,并拉通负责该进程的owner进行评估,非必要则去除perisit相关标记,必要的给出澄清报告。

以上是关于Android 使用MarsDaemon进程常驻的主要内容,如果未能解决你的问题,请参考以下文章

Android MarsDaemon实现进程及Service常驻

Android 进程常驻(虽然不可用,但是还是保留下。)

安卓android杀不死进程,保护,双进程守护,驻留,Marsdaemon,保活

Android 进程常驻----开机广播的简单守护以及总结

Android 进程常驻----开机广播的简单守护以及总结

一个带有-Xmx1024m的Java进程怎么会占用3GB的常驻内存呢?