问题标签 [foreground-service]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2446 浏览

android - 不可阻挡的服务

我尝试编写一个始终监控手机电量的应用程序,因此我尝试构建不可阻挡的服务。但是现在,当我关闭应用程序时,它没有向我发送任何通知。

这是我的代码:

AndroidManifest.xml

MainActivity.java(代码的主要部分)

BootReceiver.java

}

NotificationService.java

}

将不胜感激任何帮助,因为我无法在一周内解决这个问题。

0 投票
2 回答
37 浏览

android - Android保存图像(经过一些处理)最佳方法

我已经从相机中获取了图像,并希望在经过大约 10 秒的处理后将其保存到一个目录中。我尝试了以下方法:

1)AsyncTask(问题:如果用户关闭(滑动)应用程序,则 asyncTask 被杀死)

2)意图服务(问题:与Asynctask相同)

3)前台服务(问题:挂起应用程序的UI)

4)在 UI 线程上运行(问题:挂起应用程序)。

所以我的问题是我应该用什么来保存我的图像(经过一些处理),这样即使应用程序关闭并且 UI 没有挂起(冻结),所有任务也能完成。

任何帮助,将不胜感激。

0 投票
1 回答
1109 浏览

android - 如何将 startForeground 与 NotificationCompat.Builder 一起使用?

使用上面的代码在后台运行服务。但是当活动关闭时,服务调用 onDestroy

0 投票
0 回答
1277 浏览

android - Android BLE 前台服务

我在前台服务上工作的 BLE 通信遇到了一些问题。虽然服务上的逻辑工作正常,但如果活动是打开的,每次蓝牙设备在范围内时,我的服务都会做它必须做的事情。但是在我关闭或暂停活动后,我的服务只工作一次,它似乎忽略了扫描回调并且不做任何事情。

预期的行为应该是,即使在主要活动关闭时,服务也应该找到并执行关联的逻辑。

android是否有可能因为我失踪的某种原因而忽略了扫描回调?

提前致谢

0 投票
3 回答
2245 浏览

android - 当我刷出我的应用程序(在其他进程中运行)时,在单独进程上运行的 Android 服务被杀死

与我的真实应用程序相比,我有一个 Android 服务(Servcie 接口的实现)在单独的进程上运行。不幸的是,当我离开我的真实应用程序(我在其中单击按钮启动我的服务)并从任务管理器中将其刷出时,我的服务也被杀死了。

我知道这里有很多这样的问题,但不知何故,没有人针对我的具体星座中的问题,或者他们的回答含糊不清。

所以在我的清单中,我有类似的东西:

我首先使用了 IntentService,但也切换到了自己的服务接口实现(消除了 IntentService 成为故障点),它看起来像:

我在一个特殊按钮上的 onClick-Listener 中启动我的服务,带有一个明确的 Intent,它看起来像下面这样:

我的意图是在用户离开应用程序时保持服务运行,以便服务可以完成下载和存储一些重要数据。当用户再次回到我的应用程序时,他可以查看数据(这就是我在单独的进程中执行它的原因)。那么这可能吗?

我现在的假设是,Android 以某种方式注意到我的服务只是被我的应用程序使用(由于清单中缺少 IntentFilters 或显式调用而不是过滤器?!)因此当我的应用程序关闭时立即杀死它(即使在运行时如您在上面看到的那样 ForegroundService )。

在您看来,这是否可行,并且服务调用中的一些更改可能会解决此问题,还是我对服务的概念有误?

(最后一点:没有调用 onLowMemory-Method -> 没有日志条目。)

0 投票
0 回答
385 浏览

android - 前台服务通知按钮在重新启动活动(绑定到服务)时工作异常

我有一个MusicPlayerActivity(它的 launchMode 是 Manifest 中的 SingleTop)和MainActivity,都绑定到一个MusicService. 一切似乎都很好,但后来我看到了一个错误:播放第一首歌曲没有问题。但是当我播放第二首歌曲并尝试使用通知按钮来控制它时,就像按下了两次一样。因此,暂停会导致再次播放,下一次会导致跳过一首歌曲。

我尝试了什么: -我认为这是由于使用了 and 的组合startForeground()NotificationManager所以我删除了所有NotificationManager部分并开始使用startForeground,即使是为了更新通知(我希望这不是错误的做法)。但它没有用。

我认为问题在于: 我不确定,但我认为问题在于创建MusicPlayerActivity. 对于第一首歌,它是好的和绑定的,那么onBackPressed()MainActivityMovedToFront。然后当用户从中选择另一首歌曲时,会创建MainActivity一个新的实例并再次与服务绑定。歌曲播放良好,但通知开始变得奇怪。MusicPlayerActivity

这就是我在以下playSong()方法中创建通知的方式Service

这就是我绑定MusicPlayerActivity到服务的方式:

0 投票
1 回答
1521 浏览

android - 如何防止系统杀死我的“前台”服务?

我正在构建一个类似于 Runtastic/Endomondo/Strava 的应用程序,它需要一个服务来获取 GPS 位置,直到用户明确地停止它。

我运行了 Runtastic 和我的应用程序来尝试它。Runtastic 运行良好。但是我的应用程序丢失了所有数据,尽管通知还在状态栏中。我认为服务会自行重启,或者 Android 会杀死我的服务。

我在具有 2GB RAM 的 LG G3 中测试了该应用程序,我认为它足以运行 Runtastic 和我的应用程序。

所以,我的问题是¿保持服务在后台运行或避免系统杀死它的最佳方法是什么?我想模仿 Runtastic/Endomondo/Strava 的逻辑。这意味着,电池寿命无关紧要。

  • 我试过用START_STICKY方法上的标志启动服务onStartCommand

  • 我试图用startForeground方法启动服务

  • 我试过获取一个WakeLock

按照文档(https://developer.android.com/guide/topics/processes/process-lifecycle.html),我的服务应该是“一个可见的过程”。

这是我的服务代码的要点:https ://gist.github.com/cpalosrejano/cc1ab73c4819c3e84234f2d619421b93

¿ 我应该在 Manifest.xml 中将服务声明为进程吗?

0 投票
1 回答
4170 浏览

android - 一旦服务不再处于前台,就可以取消来自前台服务的通知

我有一个音乐控制通知,允许用户开始/停止音乐。我想要与 Google Play 音乐应用通知完全相同的行为:当音乐播放时,服务在前台,通知不可取消,当音乐不播放时,服务不再在前台,通知可以删除。它工作正常,但是当我取消服务的前台时,通知会在重新出现之前迅速删除。

这是我的代码,首先是我如何构建通知:

以下是我开始和更新通知的方式:

如果我使用 stopForeground(false),通知在运行后仍然无法取消。如果我使用 stopForeground(true),通知会很快被删除,然后再次添加,这会产生奇怪的闪烁。

如何在服务退出前台后获得可取消的通知,而无需删除然后再次添加通知?

0 投票
1 回答
246 浏览

android - 从 Asynctask 更新通知进度条时,应用程序可能在其主线程上做太多工作

我创建了一个从前台服务下载文件的演示,并在通知进度栏中显示下载进度。我在服务中使用 asynctask,在 asynctask 中我使用 HttpUrlConnection 从 Internet 下载文件并在 onProgressUpdate() 中更新进度。我显示以下错误 跳过 145 帧!应用程序可能在其主线程上做了太多工作。

和电话被绞死。

和我的异步任务

请帮助我我能做些什么来解决这个问题。提前致谢。

0 投票
1 回答
865 浏览

android - 为什么我的服务被系统杀死了?

我正在学习如何在 Android 中使用服务。我正在开发一个应用程序来了解它们。当用户按下“开始”按钮时,应用程序将启动服务。该服务将一直运行,直到用户按下“停止”按钮(Alpify 等应用程序或类似应用程序)

在 AndroidManifest 中,我的服务声明如下:

从活动中,我按如下方式启动服务:

然后我打开其他消耗大量 RAM 的应用程序(Clash Royale、Instagram、Facebook 等),我的服务被系统杀死。

我实现onTrimMemory(int level)了方法来查看发生了什么。在我的服务被杀死之前,logcat 给了我以下信息:

我已经阅读了onTrimMemory()方法的行为。文档说,当我收到该代码时,我必须释放未使用的对象。但是我的服务还没有代码

我尝试了什么:

  • largeHeap="true"在 AndroidManifest.xml 文件中设置
  • 开始服务startForeground()
  • START_STICKY服役中的旗帜
  • 获得一个wakelock

我的服务代码:

现在,我的问题:

怎么可能,当我的应用程序被系统杀死时,Runtastic 应用程序正在运行?