Android 8.0中实现后台服务持久运行的具体策略是什么?

2026-05-06 04:481阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计550个文字,预计阅读时间需要3分钟。

Android 8.0中实现后台服务持久运行的具体策略是什么?

原文地址:Android 8.0+后台服务保活的思路 | Stars-One的杂货铺

项目中有MQ服务,需要一直连接,接收消息会发送语音,手机即使在锁屏也要实现此功能。目前是使用广播机制实现。

原文地址:Android8.0 后台服务保活的一种思路 | Stars-One的杂货小窝

项目中有个MQ服务,需要一直连着,接收到消息会发送语音,且手机要在锁屏也要实现此功能

目前是使用广播机制实现,每次MQ收到消息,触发一次启动服务操作逻辑

Android 8.0中实现后台服务持久运行的具体策略是什么?

在Android11版本测试成功,可实现上述功能

步骤

具体流程:

  1. 进入APP
  2. 开启后台服务Service
  3. 后台服务Service开启线程,连接MQ
  4. MQ的消费事件,发送广播
  5. 广播接收器中,处理启动服务(若服务已被关闭)和文本语音播放功能
1.广播注册

<receiver android:name=".receiver.MyReceiver" android:enabled="true" android:exported="true"> </receiver>

public class MyReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); //匹配下之前定义的action if ("OPEN_SERVICE".equals(action)) { if (!ServiceUtils.isServiceRunning(MqMsgService.class)) { Log.e("--test", "服务未启动,先启动服务"); Intent myIntent = new Intent(context, MqMsgService.class); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { context.startForegroundService(intent); } else { context.startService(intent); } } String text = intent.getStringExtra("text"); Log.e("--test", "广播传的消息"+text); EventBus.getDefault().post(new SpeakEvent(text)); } } }

语音初始化的相关操作都在服务中进行的,这里不再赘述(通过EventBus转发时间事件)

这里需要注意的是,Android8.0版本,广播不能直接startService()启动服务,而是要通过startForegroundService()方法,而调用了startForegroundService()方法,则是需要服务在5s内调用一个方法startForeground()

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { Notification notification = NotifyUtil.sendNotification(this, "平板", "后台MQ服务运行中", NotificationCompat.PRIORITY_HIGH); startForeground(1, notification); }

上面这段代码,就是写在Service中的onCreate方法内,之前也是找到有资料说,需要有通知栏,服务才不会被Android系统给关闭,也不知道有没有起到作用

本文共计550个文字,预计阅读时间需要3分钟。

Android 8.0中实现后台服务持久运行的具体策略是什么?

原文地址:Android 8.0+后台服务保活的思路 | Stars-One的杂货铺

项目中有MQ服务,需要一直连接,接收消息会发送语音,手机即使在锁屏也要实现此功能。目前是使用广播机制实现。

原文地址:Android8.0 后台服务保活的一种思路 | Stars-One的杂货小窝

项目中有个MQ服务,需要一直连着,接收到消息会发送语音,且手机要在锁屏也要实现此功能

目前是使用广播机制实现,每次MQ收到消息,触发一次启动服务操作逻辑

Android 8.0中实现后台服务持久运行的具体策略是什么?

在Android11版本测试成功,可实现上述功能

步骤

具体流程:

  1. 进入APP
  2. 开启后台服务Service
  3. 后台服务Service开启线程,连接MQ
  4. MQ的消费事件,发送广播
  5. 广播接收器中,处理启动服务(若服务已被关闭)和文本语音播放功能
1.广播注册

<receiver android:name=".receiver.MyReceiver" android:enabled="true" android:exported="true"> </receiver>

public class MyReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); //匹配下之前定义的action if ("OPEN_SERVICE".equals(action)) { if (!ServiceUtils.isServiceRunning(MqMsgService.class)) { Log.e("--test", "服务未启动,先启动服务"); Intent myIntent = new Intent(context, MqMsgService.class); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { context.startForegroundService(intent); } else { context.startService(intent); } } String text = intent.getStringExtra("text"); Log.e("--test", "广播传的消息"+text); EventBus.getDefault().post(new SpeakEvent(text)); } } }

语音初始化的相关操作都在服务中进行的,这里不再赘述(通过EventBus转发时间事件)

这里需要注意的是,Android8.0版本,广播不能直接startService()启动服务,而是要通过startForegroundService()方法,而调用了startForegroundService()方法,则是需要服务在5s内调用一个方法startForeground()

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { Notification notification = NotifyUtil.sendNotification(this, "平板", "后台MQ服务运行中", NotificationCompat.PRIORITY_HIGH); startForeground(1, notification); }

上面这段代码,就是写在Service中的onCreate方法内,之前也是找到有资料说,需要有通知栏,服务才不会被Android系统给关闭,也不知道有没有起到作用