2014-11-24 49 views
1

我正在研究一个应用程序,在该应用程序中,我需要检查用户何时从一个应用程序(例如Facebook)切换到另一个应用程序(例如,Gmail)。优化服务

为此,我正在运行后台服务并检查循环中的顶级活动。正如预期的那样,这会导致性能下降,这当然是一个糟糕的做法。我已经考虑过这个计时器任务,但是每隔1秒就会运行一次,所以保持更高的精度,我采取循环的方式。

由于在切换发生时没有意图广播,所以我不得不采取上述两种方法之一。任何解决这个问题的解决方法将不胜感激。

回答

0

1.您使用的是后台服务,并不保证您的服务将始终运行。所以,它不合适。

2.周期性服务也是一种浪费,因为应用程序切换可能发生在不到一秒的时间内,并且在每秒之后唤醒服务的成本不会更低。

剩下的选项是你可以使用Foreground Service.Foreground Service不具有成本效益,但似乎解决了你的问题。用户将始终知道服务正在运行,并且始终可以决定是否启用/禁用该服务。

UPDATE: 如果你是真正的成本,精明的,你可以去后台服务与START_REDELIVER_INTENT。它会告诉系统重新启动并在事故发生后重新获得服务,并重新发送发生事故时出现的意图。

+0

正如我所指出的,我在线程中使用了一个循环(我从服务开始),并且我已经给用户提供了停止服务的选项,从应用程序的主要活动服务已启动)。正如你刚刚回答的那样,切换可以在不到一秒钟的时间内完成,所以我不能真正依靠一些定期的服务或定时器任务。使用前台服务可能会解决这个问题,但问题是性能问题和后台服务中CPU使用率相同。所以,我的问题仍然存在,是否有任何方法可以使其具有成本效益并且仍然能够产生结果。 – 2014-11-24 14:51:30

+0

检查更新的答案。 – vkm 2014-11-25 06:26:04

+0

我的问题与服务崩溃无关,它与我使用的循环有关,这对CPU来说太多了(因为它是无限的,除非用户停止服务或其他事情发生)。关于START_REDELIVER_INTENT,我猜这会在Android杀死服务或由于某种原因崩溃时使用。但这不是问题,我只想减少CPU负载,同时获得所需的结果。 – 2014-11-25 07:07:23