如何在应用程序被杀死后在后台运行一个线程

时间:2014-04-11 08:56:58

标签: android

我希望每次向用户提供Toast通知' x'分钟,我试图在服务的帮助下做到这一点,但是当应用程序被杀死时,服务停止。      同样的问题也出现在intent Service中,即使在应用程序被杀之后,我还应该做些什么才能让线程/服务保留在内存中?

2 个答案:

答案 0 :(得分:4)

你的问题的条款有点令人困惑:

  • 应用程序在于一个过程。如果进程被终止,那么该进程中运行的所有内容都将被终止。
  • 如果你想要让某些东西能够在这个过程中幸存下来,你应该使用第二个过程并运行它来生存。
  • 服务可以在自己的进程中运行,在这里看起来是个不错的选择。查看服务标签中的android:process属性:http://developer.android.com/guide/topics/manifest/service-element.html

但你想做的事情可能更简单:设置一个重复的任务。为此,您可以使用alarm manager

您可以,例如:

  • 为警报管理员提供待定意图
  • 待处理的意图将触发您自己的服务
  • 服务将我们醒来,然后运行。这样做的好处是不会让您的服务始终运行,并且需要花时间知道何时必须唤醒(这会耗尽电池)。在这里,警报管理器会在需要时将其唤醒,您的服务将执行其任务并死亡。

如果您将此方法与该答案的第一部分相结合,在不同的流程中运行您的服务,那么您可以为Android设备实现一些非常轻量级的服务:只有您的服务(在自己的流程中) )将以给定的间隔唤醒,此警报不会启动应用程序的进程,而只会启动服务的进程。

关于吐司通知,是的,服务是一个很好的地方,但通知栏可能更适合显示通知并通知用户某些事件发生在后台服务中。

答案 1 :(得分:1)

尝试实施前台服务。 foreground service

前台服务会显示通知,并且在您需要之前永远不会停止。

在服务的onCreate

中实施此代码段
Notification notification = new Notification(R.drawable.icon, getText(R.string.ticker_text),
        System.currentTimeMillis());
Intent notificationIntent = new Intent(this, ExampleActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
notification.setLatestEventInfo(this, getText(R.string.notification_title),
        getText(R.string.notification_message), pendingIntent);
startForeground(ONGOING_NOTIFICATION_ID, notification);