扫码关注官方订阅号
我想要开发一个能检测用户什么时间使用了什么app,使用时间有多长的功能,目前使用AlarmManager和检测activity栈顶程序的方法,但效率不高,请问有没有好的实现发案?谢谢。
认证0级讲师
可以考虑定时调用ps命令获取系统进程列表然后自行分析,需要更加详细的进程信息可以自行到/proc/PID里去读文件分析,说明可以看Linux的man proc,或者看网页版也行:http://man7.org/linux/man-pages/man5/pro...比如下面是我用PHPDroid(PHP+WebView)开发的一个Android App的运行情况:ps|head -n1 && ps|grep u0_a228Android上一个应用对应一个用户,所以可以通过用户来划分不同应用.其中的S表示进程处于睡眠状态,Linux上进程主要有下面几种状态:R (task_running) : 运行状态S (task_interruptible): 可中断的睡眠状态D (task_uninterruptible): 不可中断的睡眠状态T (task_stopped or task_traced): 暂停状态或跟踪状态Z (task_dead - exit_zombie): 退出状态,进程成为僵尸进程X (task_dead - exit_dead): 退出状态,进程即将被销毁比如PHP进程通过shell(sh)在调用ps和busybox时会看到下面的进程状态:
ps|head -n1 && ps|grep u0_a228
USER PID PPID VSIZE RSS WCHAN PC NAME u0_a228 18922 290 964616 121072 sys_epoll_ 00000000 S net.php.phpdroid u0_a228 5113 1 16632 4040 pipe_wait 00000000 S /data/data/net.php.phpdroid/php/bin/php u0_a228 29176 5113 2732 1188 sys_rt_sig 00000000 S sh u0_a228 29195 29176 2556 1012 00000000 R ps u0_a228 29196 29176 1256 4 pipe_wait 00000000 S ./busybox
自己的应用的话安利一下友盟统计,比你自己实现要来的简单容易,数据分析也会更专业。监测其它应用的话就算了。
你这个不好做吧
如果监测你自己写的app,可以在你的app中加入第三方包统计使用人数,经常浏览界面等,国内一般使用友盟,talkingdata,百度移动统计…国外一般使用Flurry,Localytics,Google Analytics for Mobile…如果检测别的app,这个真心没办法检测他们的具体使用情况,可以参考第三方的分析~~
程序启动的时候,会在Logcat中打印出一些日志信息,其中就有类似下面的日志,表明是启动了哪个程序
01-21 15:09:56.957: I/ActivityManager(240): START {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.estrongs.android.pop/.view.FileExplorerActivity u=0} from pid 2176
这些日志都可以通过以下代码读取到,并且提供了解析包名的相应方法:
try { int tagCode = EventLog.getTagCode("am_proc_start"); Collection<Event> output = new ArrayList<EventLog.Event>(); EventLog.readEvents(new int[] { tagCode }, output); for (Event event : output) { // PID, UID, Process Name, Type, Component Object[] objects = (Object[]) event.getData(); ComponentName componentName = ComponentName .unflattenFromString(objects[4].toString()); String packageName = componentName.getPackageName(); Log.d(TAG, "packageName=" + packageName); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }
如果不使用三方的SDK的话,可以自己在启动一个Service的进程,然后进行扫描,隔几秒扫描一次,然后使用时长进行累加,具体的设置方法你可以自己想一下。
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
可以考虑定时调用ps命令获取系统进程列表然后自行分析,需要更加详细的进程信息可以自行到/proc/PID里去读文件分析,说明可以看Linux的man proc,或者看网页版也行:

http://man7.org/linux/man-pages/man5/pro...
比如下面是我用PHPDroid(PHP+WebView)开发的一个Android App的运行情况:
ps|head -n1 && ps|grep u0_a228Android上一个应用对应一个用户,所以可以通过用户来划分不同应用.
其中的S表示进程处于睡眠状态,Linux上进程主要有下面几种状态:
R (task_running) : 运行状态
S (task_interruptible): 可中断的睡眠状态
D (task_uninterruptible): 不可中断的睡眠状态
T (task_stopped or task_traced): 暂停状态或跟踪状态
Z (task_dead - exit_zombie): 退出状态,进程成为僵尸进程
X (task_dead - exit_dead): 退出状态,进程即将被销毁
比如PHP进程通过shell(sh)在调用ps和busybox时会看到下面的进程状态:
自己的应用的话安利一下友盟统计,比你自己实现要来的简单容易,数据分析也会更专业。监测其它应用的话就算了。
你这个不好做吧
如果监测你自己写的app,可以在你的app中加入第三方包统计使用人数,经常浏览界面等,国内一般使用友盟,talkingdata,百度移动统计…国外一般使用Flurry,Localytics,Google Analytics for Mobile…如果检测别的app,这个真心没办法检测他们的具体使用情况,可以参考第三方的分析~~
程序启动的时候,会在Logcat中打印出一些日志信息,其中就有类似下面的日志,表明是启动了哪个程序
这些日志都可以通过以下代码读取到,并且提供了解析包名的相应方法:
如果不使用三方的SDK的话,可以自己在启动一个Service的进程,然后进行扫描,隔几秒扫描一次,然后使用时长进行累加,具体的设置方法你可以自己想一下。