使用服务来确定当前前台(运行中)应用程序的最佳方法是什么?

6
我正在开发一个应用程序,需要确定应用程序运行的时间,以便向用户显示他/她使用的应用程序的统计信息。我在网上找到了多种解决方案,但所有这些解决方案都有其缺点。
以下是我找到的两个最佳选项:
- 使用服务的轮询机制。这种解决方案似乎效率低下,并且依赖于已弃用的方法(自API级别21):getRunningTasks(int maximum) - 使用Lollipop中引入的新的“应用程序使用统计信息”,但这种解决方案仅适用于运行Android > 5.0的设备。但我也想支持旧设备。
我还搜索了一下应用程序启动或停止时是否有意图触发,但似乎没有none(请参见摘要)。这篇文章证实了这一点。此外,我发现了一个类:ActivityLifecycleCallbacks,它在活动状态更改时获取回调。但这仅适用于内部(即在您自己的应用程序中阅读)使用。
因此,我的想法是在运行版本低于棒棒糖的设备上使用服务来轮询当前前台应用程序,并在运行棒棒糖或更高版本的设备上使用新的API。但是,这个“服务”想法是最好的选择吗?因为如我之前所说,它似乎效率低下会耗费电池?也许有更好的选择?
Faas

如果你的所有问题都是关于被弃用的方法,只需进行版本检查并相应地使用方法即可。 - DroidDev
我的担忧在于这个“服务”想法是否是解决问题的好方法。我希望找到最有效的解决方案,但我认为这个“服务”想法远非高效。 - Faas
1个回答

0

第一种选择肯定不好,因为它已经被弃用了。

我建议您使用android.app.usage

你引用的应用程序可能在持续轮询ActivityManager时浪费了大量的CPU时间、RAM和电池寿命。

请记住,如果您计划让其他人访问您所提出的跟踪内容,这涉及到侵犯隐私的问题,这种类型的问题曾经给CarrierIQ带来了相当大的麻烦。


嗨,我正在Android上做类似的事情。你建议使用android.app.usage,但这是在API 21中引入的,所以对于API < 21将无法工作。你有没有老版本API的解决方法?我确实一直在持续使用一个服务,尽管我意识到这是一个不好的选择,但我并没有找到其他任何方法来做到这一点。 - gaurav jain
你可以尝试使用./adb shell dumpsys usagestats命令。但是,要使用dumpsys命令,你需要android.permission.DUMP权限,我认为除非应用程序在系统分区中,否则无法使用该权限。 - Atiq

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接