请问android上怎么保持服务不被杀死?类似微信通知服务,一直都能收到消息。
1.提高应用优先级。 2.减少内存开销,在后台减少耗电操作。 3.有条件可以找到厂商,加入他们的白名单系统不会主动杀掉。 4.PUSH通道可以用厂商的通道,比如小米使用小米推送服务,华为 手机的华为推送服务,这样即使应用被杀,也能收到推送消息的。具体的推送服务接入方法 ,厂商都有官方文档和SDK。
在Android上要保持服务不被系统杀死,从而实现类似微信通知服务那样的持续消息接收功能,可以通过结合使用前台服务(Foreground Service)、设置优先级较高的通知、请求IGNORE_BATTERY_OPTIMIZATIONS权限以及利用AlarmManager定期唤醒服务等方式来增加服务的生存周期和确保消息接收的持续性。但是这些方法对android的版本还有客制化都有一定的局限性
使用前台服务
将服务设置为前台服务,这样可以提高其优先级,减少被系统杀死的可能性。前台服务需要显示一个持续性的通知给用户,告知服务正在进行的活动。
Notification notification = ...; // 创建通知
startForeground(NOTIFICATION_ID, notification); // 将服务提升为前台服务
请求高优先级
在 Android 8.0(API 级别 26)及以上版本中,可以使用 setProcessImportance 方法请求高优先级。
Process.setProcessImportance(Process.IMPORTANCE_HIGH);
使用工作服务
使用 startForegroundService() 或 JobScheduler、WorkManager API 来启动服务,这些方法允许系统更灵活地管理服务,同时保持服务的稳定性。
进程守护技术
创建一个守护服务,当主服务被杀死时,守护服务会重新启动它。这种方法需要两个服务相互监听对方的状态,并在对方被杀死时重启对方。
// 主服务中
Intent intent = new Intent(this, GuardianService.class);
startService(intent);
// 守护服务中
Intent intent = new Intent(this, MainService.class);
PendingIntent pendingIntent = PendingIntent.getService(this, 0, intent, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
alarmManager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME,
0, AlarmManager.INTERVAL_HALF_HOUR, pendingIntent);
// 监听主服务是否被停止,并在需要时重启
监听系统广播
监听系统广播,如 ACTION_PACKAGE_RESTARTED 或 ACTION_SHUTDOWN,来重启服务。
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_SHUTDOWN);
filter.addAction(Intent.ACTION_PACKAGE_RESTARTED);
filter.addDataScheme("package");
registerReceiver(serviceReceiver, filter);
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。