【问题标题】:Best way to determine the current foreground (running) application (using a service?)确定当前前台(运行)应用程序(使用服务?)的最佳方法
【发布时间】:2014-12-15 12:24:37
【问题描述】:

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

这是我发现的两个最佳选择:

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

    getRunningTasks(int maximum)

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

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

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

法斯

【问题讨论】:

  • 如果您的所有顾虑都与不推荐使用的方法有关,只需进行构建版本检查并相应地使用方法。
  • 我不担心这种“服务”理念是否能很好地解决问题。我想要这个问题最有效的解决方案,在我看来,这种“服务”的想法远非有效。

标签: android android-intent service time


【解决方案1】:

第一个选项肯定不好,因为它已被弃用。

我宁愿建议你使用android.app.usage

您引用的应用程序可能正在浪费大量 CPU 时间、RAM 和电池寿命,不断轮询 ActivityManager。

请记住,如果您打算让用户以外的任何人访问它,那么您建议跟踪的内容就属于侵犯隐私的行为,这会导致 CarrierIQ 陷入相当大的麻烦。

【讨论】:

  • 嗨,我正在 Android 上做类似的事情。您建议使用 android.app.usage,但这是在 API 21 中引入的,因此不适用于 API
  • 您可以尝试使用./adb shell dumpsys usagestats 但是,对于dumpsys,您需要android.permission.DUMP,我认为除非应用程序在系统分区中,否则无法使用。
猜你喜欢
  • 2011-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多