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

时间:2014-12-15 12:24:37

标签: android android-intent service time

我正在构建一个需要确定应用程序运行时间的应用程序,因此我可以向用户显示他/她使用的应用程序的统计信息。我在网上找到了多种解决方案,但这些解决方案存在缺陷。

以下是我找到的两个最佳选择:

  • Using a polling mechanism提供服务。此解决方案似乎电池效率低,并且取决于deprecated方法(因为API级别21):

    getRunningTasks(int maximum)

  • 在Lollipop中使用新的“App usage statistics”,但此解决方案仅适用于运行android>的设备。 5.0。但我也想支持旧设备。

我还在应用启动或停止时搜索了一个意图触发,但似乎有none(请参阅摘要)。这post证实了这一点。我还发现了一个类:ActivityLifecycleCallbacks,当一个活动改变状态时,它会获得回调。但这仅适用于内部(在您自己的应用程序中读取)使用。

所以我的想法是使用服务来轮询运行除lollipop之外的版本的设备上的当前前台应用程序,并在运行lollipop或更高版本的设备上使用新的API。但这种“服务”理念是否是最好的选择,因为正如我之前所说的,电池效率似乎不高?也许有更好的选择?

FAAS

1 个答案:

答案 0 :(得分:1)

第一个选项肯定是坏的,因为它已被弃用。

我建议您使用android.app.usage

你引用的应用程序可能正在做的是浪费大量的CPU时间,内存和电池寿命,不断轮询ActivityManager。

请记住,如果您打算让除了用户之外的任何人访问它,您建议跟踪的内容与违反CarrierIQ类型的隐私权的行为有关。