启动服务/前台服务如果应用在后台,则会将应用置于前台



一个简单的调用

Intent serviceIntent = new Intent(this, NotificationService.class); startService(serviceIntent);

如果应用程序在后台,则将其置于前面,如果应用程序已关闭,则不会发生任何反应。我想避免这种行为,但我不知道该怎么做。 它发生在安卓OP上。 我已经设置了在特定时间唤醒我的应用程序的alarmManager,然后pendingIntent启动Activity(它不会在屏幕中显示任何内容(,并检查从Intent收到的操作以确定要执行的操作。我的应用程序中有 2 个服务,每次唤醒它们时,它们都会将应用程序带到前面,这对用户来说很烦人。

我通过在创建将由AlarmManager触发的PendingIntent时将PendingIntent.getActivity()替换为PendingIntent.getBroadcast()来解决问题。这是代码:

private PendingIntent getNotifyIntent() {
Intent notifyIntent = new Intent(mContext, MyBroadcastReceiver.class);
return PendingIntent.getBroadcast(mContext, 0, notifyIntent, 0);
}

我之前已经使用过这段代码(PendingIntent.getActivity()(,但我以前从未见过该应用程序进入屏幕。我使用的活动是完全透明和不可见的,它没有在屏幕上放置布局。我使用它是因为由于某种原因使用广播不起作用。但是现在应用程序正在打开,我认为这是因为打开的透明活动会检查应该做什么和关闭什么,在它显示在屏幕上之前调用活动。

恢复:问题不在于服务本身,而在于我设置AlarmManager

坦克你都在帮助!

在 Android 8.0 之前,创建前台服务的常用方法是 以创建后台服务,然后将该服务提升到 前景。对于安卓8.0,有一个复杂因素;系统介绍 不允许后台应用创建后台服务。为 这个原因,Android 8.0引入了新方法 startForegroundService(( 在前台启动一个新服务。 系统创建服务后,应用有五秒钟的时间 调用服务的 startForeground(( 方法来显示新服务的 用户可见的通知。如果应用不调用 startForeground(( 在时间限制内,系统停止服务并声明 应用程序是ANR。

https://developer.android.com/about/versions/oreo/background

https://stackoverflow.com/a/47611385/6059583点击此链接,显示如何显示运行服务 i 后台的通知

相关内容

最新更新