热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

手机卫士12_软件锁,应用程序相关

1,软件锁(功能描述:当软件处于以加锁的列表中时,打开这个软件会跳转到密码输入界面,输入正确会跳转到软件界面,否则密码错误)①ui参考不使用fragment,采用布局叠加隐藏,点击

1,软件锁(功能描述:当软件处于以加锁的列表中时,打开这个软件会跳转到密码输入界面,输入正确会跳转到软件界面,否则密码错误)

①ui参考

不使用fragment,采用布局叠加隐藏,点击一个文本,就显示一个界面(列表ListView),另一个布局界面隐藏起来(frameLayout帧布局实现).

②程序未加锁界面的展现

找到所有关心的控件,默认把所有的应用程序未加锁界面列表中.

参考条目ui

额外:加锁的小图标带有状态选择器,点击变换图片

横线可以考虑加个宽度为1的imageView;

③点击条目添加到以加锁列表中,并在当前列表进行移除.

由于以加锁是列表条目是需要长期保存的,所以创建数据库去记录数据.

参考表名:lockinfo,_id,主键自增长,packname应用程序包名,

然后创建dao类,操作这个表的增删改查逻辑.

如果异常出现unix之类的 C代码异常,就有可能是模拟器挂掉了.

点击条目>>添加到数据库>>以加锁条目添加数据.

额外:获取应用程序集合的时候,分流:以加锁的应用程序集合,未加锁的应用程序集合.(查表判断)

④加锁条目的显示:也是一个ListView,注意右边解锁小图标的不同.

条目点击事件里,如果点击了加锁,一个集合移除,另一个集合添加.

ui更新:把切换条目放到标题上

⑤条目的动画效果,点击之后向左移动(解锁),点击加锁,向左移动.

//位移动画.

点击条目之后播放动画,然而播放的动画效果出现在下一个条目上.(适配器.notifyDataSetChanged和动画的代码先后顺序不影响.)

因为动画的播放不是一个阻塞式的代码(并不按从上到下的代码执行顺序,而是开启了一个计时器.)

所以要注册动画的监听器setAnimationListener(new xxx){

onAnimationStart()//开始播放时

onAnimationRepeat()//重复播放

onAnimationEnd()//当动画停止播放时

}

2,程序锁看门狗的核心原理:

2.1观察Log日志,可以发现当用户打开应用的时候ActivityManager会打印一条日志,开启的应用.

所以只需要通过获取ActivityManager的数据就可以监视系统运行的状态了.

看门狗需要长期驻扎在后台程序,所以需要创建一个服务,去获取(不停的)数据

开一个子线程,死循环,或者计时器都可以达到不停获取数据的效果.

am.getRunningTask(最大任务栈数1000)//获取正在运行的任务,返回一个正在运行的任务栈集合.

一般安卓任务栈不会超过50,WIndows都不过100

这个api的特点:最近使用的在最前面,最后使用的在最后面.

RunningTaskInfo.topActivity.getPackageName();

2.2 所以只要不断获取运行的任务栈中第一个任务,然后判断它就能实现看门狗的效果.

值得注意的是,死循环需要用一个变量来控制它,方便进行关闭,不然子线程无法关闭.同时要给它每次获取数据设置一个短暂的延迟,否则每秒上千次循环遍历很容易消耗资源.

2.3 在设置中心加一个新的开关:开启,打开服务,关闭,关闭服务

记得判断状态,进行回显状态.

//权限:GET_TASK 获取任务栈状态

3,代码实现看门狗效果

3.1

①看门狗运行期间,获取到第一个任务,然后查询数据库,判断是否受保护,如果是,开启一个密码界面

服务开启activiy,记得添加flag,intent.setFlag(Intent.FLAG_ACTIVIYT_NEW_TASK);

开启界面的时候,把应用程序的包名传递过来intent.putExtra(packagename);在密码界面显示出来,方便用户区分要开启的应用是什么.

②密码界面参考ui:

③密码输入正确,finsh()掉当前页面,密码输入错误,提示错误,输入框抖动(参考api demo中的效果)

密码输入正确之后,应该告诉看门狗临时停止检测这个应用(发送广播,绑定远程服务都可以).

这里用自定义广播,如果密码输入正确,发送一条自定义广播,携带包名(为了临时停止保护)

在服务里接收到这个广播,把包名记录下来,在判断完是否需要保护,再判断是否需要临时停止检测.

3.2 BUG修复:

①用户点击返回键,密码界面消失后,可以看到一瞬间的界面,所以在密码输入界面点击返回键,就让用户直接返回桌面.

重写onBackPressd()//如果把这里面的super()代码删掉,点击返回就不会关闭界面了.

这里需要让用户返回桌面.//查看上层应用,桌面的源代码.

②用户返回桌面再打开密码保护应用时,密码保护界面还是上一次的应用.

解决方案:当界面不可见的时候关闭它.

③开启应用可以看到一瞬间的界面:看门狗循环时间间隔太长,简短即可.

3.3 如果开启了手机卫士,最小化之后,开启受保护的应用,输入正确的密码,来到的界面是手机卫士,而不是想要代开的应用.

原因:因为手机卫士的任务栈存在多个界面,当打开受保护的应用时,弹出密码输入界面.手机卫士任务栈存在两个界面,输入正确,输入密码正确只是关闭了密码输入的界面,会返回手机卫士的上一个界面.而不是受保护的应用.

解决方法:Activity期末模式:单一实例singleInstance

开发的时候灵活的使用启动模式,可以解决一些应用程序的用户体验BUG,提高程序执行效

3.4 应用程序的效率优化

①把一些引用提取到死循环的外面

②am.getRunningTasks(1);//只需要第一个任务栈中的任务就行了

③看门狗查询数据库的操作是比较消耗时间的,所以增加一个查询所有的保护应用的集合,这样每次查询的时候,就不用查询数据库,直接查询集合(在内存中,效率高)即可.

④输入密码界面的初始化操作放到死循环外面

3.5,优化之后引发的BUG

①获取数据库集合操作只执行了一次.如果在服务开启期间,增加或删除不起作用

解决:通过内容观察者实现

Uri : content://xxxxxxx

在DAO中context.getContentResolver().notifyChange(uri,通知的观察者(null,谁注册谁观察));

在服务类中,创建内容解析器.注册内容内容观察者(uri,true(前缀满足即可),内容观察者);

创建内容观察者内部类,继承ContentObserver,重写onChange()方法,当数据发生变化时调用.

发生变化之后,重新获取一次集合即可.

关键字:观察者设计模式

4.程序锁的电量优化

程序锁在后台服务一直执行,耗电量高.

当用户在操作手机的时候才进行看门狗行为,锁屏的时候关闭循环,子线程就结束掉了,解锁屏幕的时候开启子线程.

//这两个事件都会发出广播,在看门狗的内部广播接收者注册的时候增加两个action

接收到广播的时候,过滤一下action.

 技术分享

技术分享

技术分享

 技术分享

手机卫士12_软件锁,应用程序相关


推荐阅读
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 本文介绍了在使用Python中的aiohttp模块模拟服务器时出现的连接失败问题,并提供了相应的解决方法。文章中详细说明了出错的代码以及相关的软件版本和环境信息,同时也提到了相关的警告信息和函数的替代方案。通过阅读本文,读者可以了解到如何解决Python连接服务器失败的问题,并对aiohttp模块有更深入的了解。 ... [详细]
  • 预备知识可参考我整理的博客Windows编程之线程:https:www.cnblogs.comZhuSenlinp16662075.htmlWindows编程之线程同步:https ... [详细]
  • 本文讨论了在VMWARE5.1的虚拟服务器Windows Server 2008R2上安装oracle 10g客户端时出现的问题,并提供了解决方法。错误日志显示了异常访问违例,通过分析日志中的问题帧,找到了解决问题的线索。文章详细介绍了解决方法,帮助读者顺利安装oracle 10g客户端。 ... [详细]
  • 本文详细介绍了Android中的坐标系以及与View相关的方法。首先介绍了Android坐标系和视图坐标系的概念,并通过图示进行了解释。接着提到了View的大小可以超过手机屏幕,并且只有在手机屏幕内才能看到。最后,作者表示将在后续文章中继续探讨与View相关的内容。 ... [详细]
  • Sleuth+zipkin链路追踪SpringCloud微服务的解决方案
    在庞大的微服务群中,随着业务扩展,微服务个数增多,系统调用链路复杂化。Sleuth+zipkin是解决SpringCloud微服务定位和追踪的方案。通过TraceId将不同服务调用的日志串联起来,实现请求链路跟踪。通过Feign调用和Request传递TraceId,将整个调用链路的服务日志归组合并,提供定位和追踪的功能。 ... [详细]
  • SpringBoot uri统一权限管理的实现方法及步骤详解
    本文详细介绍了SpringBoot中实现uri统一权限管理的方法,包括表结构定义、自动统计URI并自动删除脏数据、程序启动加载等步骤。通过该方法可以提高系统的安全性,实现对系统任意接口的权限拦截验证。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • Android JSON基础,音视频开发进阶指南目录
    Array里面的对象数据是有序的,json字符串最外层是方括号的,方括号:[]解析jsonArray代码try{json字符串最外层是 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • WebSocket与Socket.io的理解
    WebSocketprotocol是HTML5一种新的协议。它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送 ... [详细]
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社区 版权所有