android java中的foregroundService [重复]

Posted

技术标签:

【中文标题】android java中的foregroundService [重复]【英文标题】:foregroundService in android java [duplicate] 【发布时间】:2021-04-19 03:45:21 【问题描述】:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) 
        startForegroundService(new Intent(this,service.class));
    

这里是源代码。正如我们所见,startForegroundService 在 25 API 级别以上工作。但是,我的问题是 FacebookInstagramWhatsApp 如何在每个 API 级别使用它?

【问题讨论】:

【参考方案1】:

如果您使用的是 androidx(您应该是 IMO),您可以使用适用于所有 API 版本的ContextCompat.startForegroundServce

如果没有,您可以在调用之前检查API版本:

if (Build.VERSION.SDK_INT >= 26) 
    context.startForegroundService(intent);
 else 
    context.startService(intent);

请注意,Service.startForeground 从 API 5 开始可用,这意味着您的服务可以在前台运行,而无需在这些 API 版本上调用 startForegroundService

如果您想知道为什么 API 26 发生了变化,这里引用了documentation:

在 Android 8.0 之前,创建前台服务的常用方法是创建后台服务,然后将该服务提升到前台。对于 Android 8.0,有一个复杂的问题;系统不允许后台应用创建后台服务。为此,Android 8.0 引入了新方法startForegroundService() 在前台启动新服务。系统创建服务后,应用有五秒钟的时间调用服务的startForeground() 方法以显示新服务的用户可见通知。如果应用没有在时限内调用startForeground(),系统会停止服务并将应用声明为ANR。

【讨论】:

以上是关于android java中的foregroundService [重复]的主要内容,如果未能解决你的问题,请参考以下文章

权限拒绝:startForeground 需要 android.permission.FOREGROUND_SERVICE

为什么`android:foreground`属性不起作用?

Android FrameLayout的android foreground属性可以设置单击时的前景色

复制资源/android/icon/mdpi-foreground.png 时出错

媒体投影需要 Android Pie 和 Q 中类型为 ServiceInfo.FOREGROUND_SERVICE TYPE_MEDIA_PROJECTION 的前台服务

安卓开发需要学啥