热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

【Android】最近做的一个Android平台下时间统计工具

最近在完成实验室的项目之后花了一点时间弄了一个小应用。因为自己也算是手机重度手机依赖患者,平时虽然玩手机时间不长,但是很频繁,所以一直想要知道自己每天打开手机多少次,用了哪些应用,以及

最近在完成实验室的项目之后花了一点时间弄了一个小应用。因为自己也算是手机重度手机依赖患者,平时虽然玩手机时间不长,但是很频繁,所以一直想要知道自己每天打开手机多少次,用了哪些应用,以及每个应用花了多少时间。加上刚刚看了一本时间管理的书《奇特的一生》,所以就简单的设计了一下主要功能,然后开始做了。比较简单的应用,主要是代码的逻辑。

描述

设计的想法来自于《奇特的一生》中主人公柳比歇夫的时间统计法,应用的名字也是来自于该书第8章”时间之镜”。整本书都在说的一个主题就是时间统计法是如何有效以及如何帮助主人公在有限的人生中作出令人惊叹的成就。同时对比于当下人们花在智能手机上的时间越来愈多,所以就像做一款可以帮助人们记录自己在这些设备上花费了多少精力(开启应用的次数和开启应用的时间等信息),然而实际上大家对自己究竟花了多少时间是毫无概念的,所以这款App的目的就是来提醒用户,每天的碎片时间累积起来也是很多很让人惊奇的。所以适时的放下手机,把这些碎片时间累积起来做一些有更有意义的事情,更好的管理自己的时间和精力,虽然不能像柳比歇夫那样成为达人,但是至少可以更加有效的利用时间。

基于这样的想法,应用开发的主要任务就是统计时间了。统计内容包括:每个应用的开启次数和开启时间,每天自己打开了多少个App和使用了多少次,每周自己使用了多少个App和使用了多少次。当然应用附加的提供了一些应用管理功能:包括区分应用类型(系统应用还是第三方应用)以及打开和卸载功能,浮窗快捷开启功能。

主要功能

基本功能如下:
1)统计系统中所有安装应用的使用频率以及累计使用时间长度
2)列出每天以及每周使用应用的次数,花费的时间,启动应用的个数
3)标识出使用最频繁花费最多的应用
4)基本的应用管理功能,如软件卸载及应用类别区分
5)设置快速访问功能,列出最常使用的6款应用并添加快捷访问
6)其他基本管理及更新功能

关键模块逻辑

关键部分就是如何实现应用的使用时间统计了。实际实现的时候采用的是一个后台服务不断的检测当前桌面顶端的Activity栈,判断栈顶界面属于哪个应用的,每一秒检查一次。栈顶Activity的切换有四种情形:1,桌面-桌面;2,桌面-应用;3,应用-应用;4,应用-桌面。

第一种情形,不做任何动作。
第二种情形,说明用户从桌面开启了一个应用,那么需要做的就是开始对该应用启动计时操作。
第三种情形,还存在两种子情况,本应用-本应用,本应用-其他应用。前者直接对计数器加1,后者则结束本应用的计时,将计时数据持久化,同时开始后一个应用的计时逻辑。
第四种情形,说明应用退出回到桌面了,那么直接结束当前应用的计时,并将数据持久化即可。

计时的服务并不是一直都在运行的,毕竟也没有必要一直运行。采用的方法是添加对解锁的广播监听事件,如果当前用户解锁,那么开启服务检测桌面应用栈的变化情况,锁屏之后关闭服务,减少对资源的消耗。一开始也没有想这么多,直接使用了一个服务运行在后台,而且关机也一直运行,在测试的时候,用自己的三星机子测试,由于三星系统接近原生,而且用的系统版本4.3也比较旧,对后台服务其实没有做过多的管理,除非是内存不足才会去关闭一些无关进程,但是这种情况很少发生,毕竟服务进程的的优先级还是比较高的。就算在资源紧缺的时候被系统关闭,也只是暂时的,后边还是会被系统开启。这样就造成了大量的资源浪费,所以为了减少不必要的浪费,就采用这种动态开启的方式运行。

另外一个关键的模块是悬浮窗体的设计。一开始是没有这个功能的,但是毕竟是统计了应用使用频率,所以就想可不可以实现一个快速访问的功能,直接按用户使用平率和时间给这些应用附加权重,然后排序。当用户打开悬浮窗的时候,可以直接快速的打开自己最常使用的6款应用。这个浮动窗体的实现了两个,大悬浮窗用来显示常用应用,小悬浮窗作为一个快捷方式。只有当用户点击小悬浮窗的时候才可以打开大悬浮窗体。另外小悬浮窗体的实现借鉴了某数字公司的桌面悬浮的思路,就是即使应用退出,小悬浮窗也可以显示在桌面上,而且还可以拖动到任意位置。当用户打开其他应用的时候,小悬浮窗还可以自动的隐藏。这一块主要是通过WindowsManager来实现的,通过WindowsManager把自定义布局的窗体add到桌面即可。主要部分在于对这两个窗体的管理上面。

应用截图






两个同类型的应用

24PI:
UI很赞,功能及其强大。做到一半发现有这么个应用,可能TimeMirror相比于24PI的仅有的两个优点是消耗资源少和可以代码开放。很不错的应用,不过不知道这款应用的盈利点在哪里?似乎是一款很注重情怀的应用
http://www.wandoujia.com/apps/com.dlj24pi.android

拾光:
自己学校的一个学生创业团队的作品,已经天使轮近百万了
UI做的挺不错的,毕竟有一个有激情的团队
http://www.wandoujia.com/apps/net.keshile.mykeyguard


推荐阅读
  • 2023 ARM嵌入式系统全国技术巡讲旨在分享ARM公司在半导体知识产权(IP)领域的最新进展。作为全球领先的IP提供商,ARM在嵌入式处理器市场占据主导地位,其产品广泛应用于90%以上的嵌入式设备中。此次巡讲将邀请来自ARM、飞思卡尔以及华清远见教育集团的行业专家,共同探讨当前嵌入式系统的前沿技术和应用。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • Linux 系统启动故障排除指南:MBR 和 GRUB 问题
    本文详细介绍了 Linux 系统启动过程中常见的 MBR 扇区和 GRUB 引导程序故障及其解决方案,涵盖从备份、模拟故障到恢复的具体步骤。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 本文介绍了一款用于自动化部署 Linux 服务的 Bash 脚本。该脚本不仅涵盖了基本的文件复制和目录创建,还处理了系统服务的配置和启动,确保在多种 Linux 发行版上都能顺利运行。 ... [详细]
  • 本文探讨了如何通过最小生成树(MST)来计算严格次小生成树。在处理过程中,需特别注意所有边权重相等的情况,以避免错误。我们首先构建最小生成树,然后枚举每条非树边,检查其是否能形成更优的次小生成树。 ... [详细]
  • PyCharm下载与安装指南
    本文详细介绍如何从官方渠道下载并安装PyCharm集成开发环境(IDE),涵盖Windows、macOS和Linux系统,同时提供详细的安装步骤及配置建议。 ... [详细]
  • 在 Windows 10 中,F1 至 F12 键默认设置为快捷功能键。本文将介绍几种有效方法来禁用这些快捷键,并恢复其标准功能键的作用。请注意,部分笔记本电脑的快捷键可能无法完全关闭。 ... [详细]
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 本文详细介绍了如何在BackTrack 5中配置和启动SSH服务,确保其正常运行,并通过Windows系统成功连接。涵盖了必要的密钥生成步骤及常见问题解决方法。 ... [详细]
  • 本文介绍了如何使用JQuery实现省市二级联动和表单验证。首先,通过change事件监听用户选择的省份,并动态加载对应的城市列表。其次,详细讲解了使用Validation插件进行表单验证的方法,包括内置规则、自定义规则及实时验证功能。 ... [详细]
  • 深入解析Spring Cloud Ribbon负载均衡机制
    本文详细介绍了Spring Cloud中的Ribbon组件如何实现服务调用的负载均衡。通过分析其工作原理、源码结构及配置方式,帮助读者理解Ribbon在分布式系统中的重要作用。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
author-avatar
泰有趣
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有