Android 应用保活攻略
保活(保持应用进程一直存活)就是为了让应用在后台持续运行,来实现某些特定的功能,如实时消息推送、定位服务等。
对于RPA程序,进程保活是非常重要的,尤其在Android系统中,由于Android系统为了节省资源和保护用户隐私,通常会限制后台应用的运行,因此,我们需要采取一些策略来实现保活。
本文整理近期网上一些保活手段,希望能对你有所帮助。
背景:
从最早的Java层中接受各种事件和广播等时机唤醒我们的应用,在到Native层的进程保活都是很好的方案,但是随着Android系统的更新,Google也担心用户手机中的一些应用关闭失败导致手机耗电很快。所以也给出了很多策略让保活方案一度受到很大的障碍,同时国内的一些手机厂商更是厉害,直接forcestop操作,这种操作理论上是最终的杀死进程方案了。包括小米,OV等厂商都是这么做的,但是有一个问题就是像微信中及时接受消息的应用如果系统把他强杀之后接收不到消息,用户也是要疯掉的,所以系统厂商会给出一个白名单有一些应用是不会强杀的。当然现在还有很多应用在一起组成了一个拉活联盟 ,就是你的应用可以把我的应用唤醒,我的应用可以把别人的应用唤醒,只要在这个联盟里面的应用都可以相互唤醒和被唤醒,这样如果你手机中如果装了这些联盟中的应用,只要一个没有别杀死那么联盟中的成员应用都会被唤醒。还有一种方案是因为我们知道微信和QQ这样的及时应用很多厂商加了白名单 ,也就是这些应用不会被杀死的,那么他们应用肯定会在指定时机中发出一些特定广播,这个需要反编译去看看他们内部到底有哪些广播了,我们可以监听这些广播,只要微信不死,在一定时间内发出了我们注册了他的广播,我们也有可能被唤醒。当然还有很多方案比如网上很多的MarsDaemon框架,不过这个框架对于小米系统来说几乎是失败的。
初级操作,从应用层面上来说有3个常规操作,可以引导用户去手动设置:
1、锁定应用。
2、应用添加到自启动。
3、应用添加到电池管理的允许高耗电。
中级操作,从开发层面上来说有:
1. 前台服务(Foreground Service)
将应用的Service设置为前台服务,这样系统会认为这个服务是用户关心的,不容易被杀死。前台服务需要显示一个通知,告知用户当前服务正在运行。通过调用 startForeground(int id, Notification notification) 方法将服务设置为前台服务。
Android中的进程是托管的,当系统进程空间紧张的时候,会依照优先级自动进行进程的回收。Android将进程分为6个等级,它们按优先级顺序由高到低依次是:
前台进程( FOREGROUND_APP)
可视进程(VISIBLE_APP )
次要服务进程(SECONDARY_SERVER )
后台进程 (HIDDEN_APP)
内容供应节点(CONTENT_PROVIDER)
空进程(EMPTY_APP)
2. 双进程守护
创建两个Service,分别运行在不同的进程中。当一个进程被杀死时,另一个进程可以通过监听 onServiceDisconnected(ComponentName name) 方法来感知,并重新启动被杀死的进程。这样可以相互守护,提高应用的存活率。
3. 使用系统广播拉活
使用系统广播拉活。监听系统广播,如开机广播、网络变化广播、应用安装卸载广播等。当收到广播时,检查应用进程是否存活,如果已经被杀死,则重新启动应用。
4. JobScheduler
使用JobScheduler定时启动应用。JobScheduler是Android 5.0引入的一种任务调度机制,可以在满足特定条件下执行任务。通过创建一个Job,设置触发条件,然后将Job提交给JobScheduler。当触发条件满足时,JobScheduler会启动应用。
5.service.onStartCommand返回START_STICKY
这种办法在应用因为内存不足而被杀死之后,可以起来,但是在系统的APP管理器中去杀掉,也是起不来的!
6. 合理使用WakeLock
在某些特定场景下,可以使用WakeLock(电源锁)来防止CPU进入休眠状态,从而确保应用能够在后台持续运行。但请注意,WakeLock可能会导致设备电量消耗增加,因此应谨慎使用,并在不需要时尽快释放锁。
7. 合理使用SyncAdapter
SyncAdapter是Android提供的一种同步框架,用于处理数据同步操作。SyncAdapter可以根据设备的网络状态、电池状态等条件来自动调度同步任务。虽然SyncAdapter并非专门用于保活,但它可以在一定程度上提高应用在后台的存活率。
等等
高级操作,利用第三方应用拉活,这个就需要自己深入研究了
参考了以下文章:
https://www.jianshu.com/p/05c48914287f
https://blog.51cto.com/u_16099205/9387627


版权声明
如有错误或侵权,请联系我删除,QQ123242726。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。