热门标签 | 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


推荐阅读
  • 使用 ModelAttribute 实现页面数据自动填充
    本文介绍了如何利用 Spring MVC 中的 ModelAttribute 注解,在页面跳转后自动填充表单数据。主要探讨了两种实现方法及其背后的原理。 ... [详细]
  • Redis: 高效的键值存储系统
    Redis是一款遵循BSD许可的开源高性能键值存储系统,它不仅支持多种数据类型的存储,还提供了数据持久化和复制等功能,显著区别于其他键值缓存解决方案。 ... [详细]
  • 本文详细介绍了Python中的生成器表达式、列表推导式、字典推导式及集合推导式等,探讨了它们之间的差异,并提供了丰富的代码示例。 ... [详细]
  • 利用Cookie实现用户登录状态的持久化
    本文探讨了如何使用Cookie技术在Web应用中实现用户登录状态的持久化,包括Cookie的基本概念、优势及主要操作方法,并通过一个简单的Java Web项目示例展示了具体实现过程。 ... [详细]
  • 探索OpenWrt中的LuCI框架
    本文深入探讨了OpenWrt系统中轻量级HTTP服务器uhttpd的工作原理及其配置,重点介绍了LuCI界面的实现机制。 ... [详细]
  • 本文详细介绍了PHP中的几种超全局变量,包括$GLOBAL、$_SERVER、$_POST、$_GET等,并探讨了AJAX的工作原理及其优缺点。通过具体示例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • 开发笔记:每篇半小时1天入门MongoDB——3.MongoDB可视化及shell详解
    开发笔记:每篇半小时1天入门MongoDB——3.MongoDB可视化及shell详解 ... [详细]
  • 本文详细介绍了如何使用Rufus工具制作一个兼容UEFI启动模式的Windows Server 2008 R2安装U盘,包括必要的软件和步骤。 ... [详细]
  • 第1章选择流程控制语句1.1顺序结构的基本使用1.1.1顺序结构概述是程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序,依次执行,程序中大多数的代码都是这样执行 ... [详细]
  • 本文介绍了一个基本的同步Socket程序,演示了如何实现客户端与服务器之间的简单消息传递。此外,文章还概述了Socket的基本工作流程,并计划在未来探讨同步与异步Socket的区别。 ... [详细]
  • 使用IntelliJ IDEA高效开发与运行Shell脚本
    本文介绍了如何利用IntelliJ IDEA中的BashSupport插件来增强Shell脚本的开发体验,包括插件的安装、配置以及脚本的运行方法。 ... [详细]
  • ED Tree HDU4812 点分治+逆元
    这道题非常巧妙!!!我们进行点分治的时候,算出当前子节点的所有子树中的节点,到当前节点节点的儿子节点的距离,如下图意思就是当前节点的红色节点,我们要求出红色节点的儿子节点绿色节点, ... [详细]
  • iOS 小组件开发指南
    本文详细介绍了iOS小部件(Widget)的开发流程,从环境搭建、证书配置到业务逻辑实现,提供了一系列实用的技术指导与代码示例。 ... [详细]
  • 本文总结了在多人协作开发环境中使用 Git 时常见的问题及其解决方案,包括错误合并分支的处理、使用 SourceTree 查找问题提交、Git 自动生成的提交信息解释、删除远程仓库文件夹而不删除本地文件的方法、合并冲突时的注意事项以及如何将多个提交合并为一个。 ... [详细]
  • 本文详细介绍了在PHP中如何获取和处理HTTP头部信息,包括通过cURL获取请求头信息、使用header函数发送响应头以及获取客户端HTTP头部的方法。同时,还探讨了PHP中$_SERVER变量的使用,以获取客户端和服务器的相关信息。 ... [详细]
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社区 版权所有