我正在构建一个需要确定应用程序运行时间的应用程序,因此我可以向用户显示他/她使用的应用程序的统计信息。我在网上找到了多种解决方案,但这些解决方案存在缺陷。
以下是我找到的两个最佳选择:
Using a polling mechanism提供服务。此解决方案似乎电池效率低,并且取决于deprecated方法(因为API级别21):
getRunningTasks(int maximum)
我还在应用启动或停止时搜索了一个意图触发,但似乎有none(请参阅摘要)。这post证实了这一点。我还发现了一个类:ActivityLifecycleCallbacks,当一个活动改变状态时,它会获得回调。但这仅适用于内部(在您自己的应用程序中读取)使用。
所以我的想法是使用服务来轮询运行除lollipop之外的版本的设备上的当前前台应用程序,并在运行lollipop或更高版本的设备上使用新的API。但这种“服务”理念是否是最好的选择,因为正如我之前所说的,电池效率似乎不高?也许有更好的选择?
FAAS
答案 0 :(得分:1)
第一个选项肯定是坏的,因为它已被弃用。
我建议您使用android.app.usage
你引用的应用程序可能正在做的是浪费大量的CPU时间,内存和电池寿命,不断轮询ActivityManager。
请记住,如果您打算让除了用户之外的任何人访问它,您建议跟踪的内容与违反CarrierIQ类型的隐私权的行为有关。