android应用锁之监听应用前后台切换方式
今天在做技术总结,顺便就把知识共享,个人崇尚分享。
通过以下方式来监听是不是发生了应用的前后台切换:
1. android api 10 – 15
通过ActivityManager registerActivityWatcher方法注册IActivityWatcher的方式监听。
2. android api 16 – 20
通过监听/dev/log/events文件内容变化来监听应用切换变化。
为什么这个方式能成功监听:
因为/dev/log/events是内核的日志输出字符设备终端文件。
通过查看logger.h(linux内核日志输出系统)发现定义了:
定义/dev/log/events日志输出设备文件
通过查看logcat.cpp源码我们会发现:
他的readLogLines(log_device_t * devices)函数
通过select方式一直监听内核日志的输出,然后在输出到屏幕终端,所以我们可以在terminal中输入adb locat看到系统日志输出如下:我点击短信app
看看readLogLines 函数中log_device_t创建:
为啥要使用这种方式来监听:
因为android api16-20中使用了IActivitContorller或IProcessObserver来代替IActivityWatcher,但是这种方式只能监听自己的activity切换,监听别的应用需要系统权限。
3. android api 21及以上:
通过监听bg_non_interactive/tasks文件内容变化来监听应用切换变化。
为什么这种方式能监听成功
这当然是系统设计时留下来的一个漏洞,当app发生前后台切换时,他的pid会相应的在bg_non_interactive/tasks中增加或删除
为啥要使用这种方式来监听:
因为/dev/log/events不能在用户态进行监听,看logcat的源码没有选择直接监听,还是通过logger提供的接口去内核态进行监听
4. 其他辅助监听方式:
监听相应的/proc/pid/oom_adj值得变化来监听前后切换
5. 后备方式:
通过轮询来获取应用切换变化(耗电量大,暂时没有使用)
android应用锁之监听应用前后台切换方式的更多相关文章
- Android Back Home键监听
Android Back Home键监听 Back键的监听 对于Back键的监听比较容易,可以在多个系统回调处拦截,比如在activity的下列方法中都可以收到Back键按下的事件: @Overrid ...
- Android EditText截获与监听输入事件
Android EditText截获与监听输入事件共有2种方法: 1.第一种方法:使用setOnKeyListener(),不过这种方式只能监听硬键盘事件. edittext.setOnKeyLi ...
- iOS开发——锁屏监听
公司所做的项目,锁屏监听是为了60秒后,解锁瓶后显示[手势解锁]或[指纹验证]: 第一步:AppDelegate.m 头部导入 #import <notify.h> #define Not ...
- Android对ScrollView滚动监听,实现美团、大众点评的购买悬浮效果
转帖请注明本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/17761431),请尊重他人的辛勤劳动成果,谢谢! 我之前写 ...
- Android addTextChangedListener(文本监听)参数解释及实现EditText字数监听
由于最近做项目要检测EditText中输入的字数长度,从而接触到了Android中EditText的监听接口,TextWatcher.它有三个成员方法,第一个after很简单,这个方法就是在EditT ...
- Android-Activity横竖屏切换不杀死Activity 并监听横竖屏切换
在上一篇博客,Android-Activity临时数据的保存,中讲解到,当发生横竖屏切换的时候,系统会杀死Activity并重新启动Activity 系统会杀死Activity 12-12 08:11 ...
- extjs组件添加事件监听的三种方式
extjs对组件添加监听的三种方式 在定义组件的配置时设置 如代码中所示: Java代码 xtype : 'textarea', name : 'dataSetField', labelSe ...
- android事件处理之基于监听
Android提供了了两种事件处理方式:基于回调和基于监听. 基于监听: 监听涉及事件源,事件,事件监听器.用注册监听器的方法将某个监听器注册到事件源上,就可以对发生在事件源上的时间进行监听. 最简单 ...
- Android 对电话进行监听和挂断
1.添加权限 <!--拨打电话的权限--><uses-permission android:name="android.permission.PROCESS_OUTGOIN ...
随机推荐
- HTML DOM基础知识
HTML DOM基础知识 一.什么是DOM? 1.HTML DOM 定义了访问和操作HTML文档的标准方法. 2.HTML DOM 把 HTML 文档呈现为带有元素.属性和文本的树结构(节点树). 3 ...
- Oracle序列和索引
序列和索引 一.序列 1.序列的概念: 序列(Sequence)是用来生成连续的整数数据的对象.它常常用来作为主键的增长列,可以升序,也可以降序. 2.创建序列: 语法:创建序列 ...
- DHCP中继
DHCP中继 要求: 假设公司现在有两个部门分别为 销售部门,生产部门 对这两个部门分配不同网段, 销售部门 192.168.1.0/24 生产部门 192.168.2.0/24 为了节约使用LINU ...
- http://www.blogjava.net/xylz/archive/2013/08/05/402405.html
http://www.blogjava.net/xylz/archive/2013/08/05/402405.html
- RDIFramework.NET ━ 9.15 个性化设置 ━ Web部分
RDIFramework.NET ━ .NET快速信息化系统开发框架 9.15 个性化设置 -Web部分 个性化设置,主要针对用户的偏好对界面进行设置,主界面如下: 9.15.1界面皮肤设置 目前框 ...
- [转] CentOS单独安装Apache Benchmark压力测试工具的办法
Apache安装包中自带的压力测试工具 Apache Benchmark(简称ab) 简单易用,这里就采用 ab作为压力测试工具了. 1.独立安装 ab运行需要依赖apr-util包,安装命令为: 1 ...
- CentOS系统将UTC时间修改为CST时间
1.编辑时间配置文件 # vi /etc/sysconfig/clock ZONE="Asia/Shanghai" UTC=false #设置为false,硬件时钟不于utc时间一 ...
- 《30天自制操作系统》13_day_学习笔记
harib10a: 简化字符串的显示:我们发现字符串显示三条语句总是重复出现,并且总是一起出现的.接下来我们把它归纳到一个函数中,这样便于使用. x,y--位置的坐标 c--字符颜色 (col ...
- struts2-通配符映射(基本没啥卵用)和动态调用
通配符 使用*代表任意字符 一般在action的name中使用*,并可以使用多个 可以使用{通配符的序号}引用对应的通配符所代表的值,序号从1开始 {0}代表整个URI 匹配规则 首先完全匹配,没有完 ...
- JS中对this的理解
// this: 指的是调用 当前 方法(函数)的那个对象 <script> function fn1(){ this } 情况1:fn1() //这里t ...