如何让android的service一直在后台运行?

时间:2021-08-10 23:46:00
1. 把service和activity分开,让service开机启动。设置一个broadcast receiver接受开机信号,使用RECEIVE_BOOT_COMPLETED的permission, 然后启动service。activity启动后绑定到service上,通过ipc机制通信,acitivity结束后松绑。注意安装后要手动启动service,不会自动启动,之后重启手机后才会随开机启动。

2. 在内存低的时候系统会自动清理进程,这时候后台service可能会被杀掉。可以在onStartCommand中返回START_STICKY,这样系统有足够多资源的时候,就会重新开启service。

3. 以上不需要NDK,直接用SDK开发就可以了。




android 一直运行的后台服务是不存在的,而且也不是最佳实践,因为一直运行的后台服务会耗费大量系统资源,影响其他程序的响应从而影响到用户体验。
可以考虑使用如下几种方案来达到一直运行的效果。
1. 调用startForeground方法,android: Service vs SingleTop Activity moved to background
2. 使用AlarmManager 发送定时任务 : Diamonds Are Forever. Services Are Not.



我现在也遇到这个问题,我想楼主之所以出现这个问题的原因是,你在Activitiy中创建的Service运行在当前进程中,当你把这个Activitiy的进程杀掉之后,自然这个服务也就停止了。
所以我的建议是在startService的时候,让这个Service运行在与该Activity不同的进程中(可以startService或者开机时创建一个新的进程)。实际上就是Linux里面的进程操作。可以使用NDK开发用C或者C++新建一个进程来运行自己的服务,并提高进程优先级,避免被清理掉(我猜测QQ和微信的推送服务,或许是这么实现的)。


有一种做法是开两个进程来相互监督,一旦其中一个进程被停止,另一个检测到后,立即或稍后重启另一个进程。这里可以效仿这种做法。可以开两个进程,一个用来做前台,另一个负责运行服务,后者没有activity,由前者初始化并启动,这样,当前台进程被关闭时,服务并不被关闭