开发者社区> 问答> 正文

请问android上怎么保持服务不被杀死?类似微信通知服务,一直都能收到消息。

请问android上怎么保持服务不被杀死?类似微信通知服务,一直都能收到消息。

展开
收起
OSC开源社区 2024-05-28 08:28:14 157 0
3 条回答
写回答
取消 提交回答
  • 1.提高应用优先级。 2.减少内存开销,在后台减少耗电操作。 3.有条件可以找到厂商,加入他们的白名单系统不会主动杀掉。 4.PUSH通道可以用厂商的通道,比如小米使用小米推送服务,华为 手机的华为推送服务,这样即使应用被杀,也能收到推送消息的。具体的推送服务接入方法 ,厂商都有官方文档和SDK。

    2024-05-28 13:54:20
    赞同 展开评论 打赏
  • 在Android上要保持服务不被系统杀死,从而实现类似微信通知服务那样的持续消息接收功能,可以通过结合使用前台服务(Foreground Service)、设置优先级较高的通知、请求IGNORE_BATTERY_OPTIMIZATIONS权限以及利用AlarmManager定期唤醒服务等方式来增加服务的生存周期和确保消息接收的持续性。但是这些方法对android的版本还有客制化都有一定的局限性

    2024-05-28 09:33:16
    赞同 1 展开评论 打赏
  • 北京阿里云ACE会长

    进程守护

    使用前台服务
    将服务设置为前台服务,这样可以提高其优先级,减少被系统杀死的可能性。前台服务需要显示一个持续性的通知给用户,告知服务正在进行的活动。

    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);

    2024-05-28 09:33:15
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
58同城Android客户端Walle框架演进与实践之路 立即下载
Android组件化实现 立即下载
蚂蚁聚宝Android秒级编译——Freeline 立即下载