【问题标题】:Android Intent service + notificationsAndroid Intent 服务 + 通知
【发布时间】:2017-04-04 17:26:31
【问题描述】:

我的应用程序中有在后台运行的任务。这些任务可以执行一个小时或更长时间。

有两个问题:

1) 我需要向用户显示任务的状态。这个怎么做?每次创建通知?如何解决这个问题的最佳实践是什么?

2) 是否可以让那个intent service执行任务到最后不掉线?

【问题讨论】:

  • 是的,试试这个:- stackoverflow.com/a/43198270/6096821
  • Andy 但是如果 MainActivity 将被杀死,我们将在服务向 MainActivity 发送通知时捕获 NullPointerException 或类似的东西?因为如果没有 MainActivity,您的广播接收器就不会存在。
  • 请仔细观看,因为广播已经注册在onResume中。

标签: android notifications android-notifications intentservice


【解决方案1】:

如果您希望您的服务在完成任务后继续运行,IntentService 不是最佳选择。您可以使用Foreground service 来满足您的两个要求 - 向用户显示通知和长时间运行的任务

编辑:因为foreground service 只是在主线程上运行的普通服务,所以您需要使用Async task 进行实际的后台工作(或任何其他异步工作方式)。 从好的方面来说,使用前台服务将使系统不太可能停止长时间运行的工作

【讨论】:

  • 我没想过,也是个想法。服务只会显示在通知栏?此解决方案可能存在哪些问题?
  • 服务不会在通知栏中“显示”。它只会像正常服务一样运行,但会像在前台一样被线程化,也就是系统会尝试不杀死它。 @Delphian 我用赞成和反对进行了编辑
  • 我添加了 startForeground() 而不是 NotificationManager.notify() 并且如果应用程序关闭,我的 intentService 不会被杀死和工作。但是当我点击我的通知并且应用程序再次启动时,我的 intentService 停止了。如何改变这个?
  • 您的通知意图是什么?也许您正在那里重新启动/取消服务?
  • 我的待定意图是:PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0,PendingIntent.FLAG_UPDATE_CURRENT);但我发现了问题。谢谢!我想再问一个问题:我正在使用 startForeground(NOTIFICATION_ID, mNotification.build());服务停止时无法从通知栏删除通知?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-04
  • 2015-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多