手机卫士11_ 自定义控件_缓存清理_病毒库更新

拷贝安卓源码中的逻辑,可以考虑先创建一个小项目实现以下效果

1,病毒数据库的自动更新(连接网络,然后获取特征码保存到数据库?)

①工程师发现病毒apk,获取到它的特征码发布到服务器上

通过 MD5 或者ASH1获取特征码

②客户端杀毒软件下载特征码(可能是 JSON串)到本地客户端

(在打开软件的时候还是打开查杀界面的时候?其实都不适合,应该开启一个服务去定期更新数据库,访问病毒更新特征码地址)

定期更新,timer和timertask,一般一个小时更新一次(测试的时候写短一点)

连接服务器:Url对象,获取链接HttpUrlConnection,设置超时时间,请求方式,

获取响应码,判断结果,最后转换输入流为字符串.转换成json对象

③本地客户端解析特征码,然后保存至数据库,最后查杀病毒.

解析服务器的病毒库版本,获取本地病毒库的版本(对应的表).

如果不一致,就添加新的病毒条目到本地,并且更新版本.

额外:①添加条目的时候记得查看DDL数据模式定义,语言查看表结构

②如果要更新数据库条目和版本,记得开启数据库事务,保持一致性.

db.beginTransaction();//开始数据库事务

db.beginTransactionSuccessful();//事务执行成功

db.endTransaction()//结束事务,写在 finally里.

③要记得开启服务,放在splash里开启即可.(要判断病毒数据库是否存在)

额外:检测恶意APP还有:文件检验,行为分析等,很多查杀病毒方式.

2,横竖屏切换的生命周期

2.1横竖屏切换的时候界面重新创建activity,解决方式:

①固定横竖屏.

②不让activity重建.

2.2 自定义控件的显示样式:

查找源码>>styles样式文件,找到想要查看的显示样式

根据不同的样式节点,查看对应的xml样式文件.

进度条实际上有三层,一个背景,两个进度(大进度,小进度,参考播放器进度)

//不想写就拷贝源码中的文件,修改参数即可,把进度背景改成想显示的图片(要替换的话,三个背景图片最好都替换掉)即可.

要注意对应的属性名,不要搞错了,不然不生效。

参考背景设置xml资源

<?xml version="1.0" encoding="utf-8"?>

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

<item  android:id="@android:id/background" android:drawable="@drawable/progress_bg">

</item>

<itemandroid:id="@android:id/secondaryProgress"android:drawable="@drawable/security_progress"> </item>

<itemandroid:id="@android:id/progress"  android:drawable="@drawable/security_progress">

</item>

</layer-list>

3, 缓存清理功能

3.1 ui

①缓存清理,SD卡清理,痕迹清理(暂时不用)三个选项卡,使用Fragment碎片界面.

②主界面ui参考:

记得给这让两个小选项卡的背景变换(表示一个被选中,一个没选中.参考home界面的条目小背景,一个透明的边框线)

点击一个选项卡之后,还要记得切换它们的图标资源(醒目的和不醒目的图片,文本颜色也可以修改掉,更好看一些,吗?)记得改布局的默认颜色,不然第一次打开颜色还是黑色.

③Fragment包,存放所有碎片文件(考虑向下兼容,使用v4包)

创建类继承Fragment,重写onCreate,返回的View 代表这个碎片布局样式.

布局样式:暂无,写一个TextView的文本标记一下即可.

获取上下文:getActivity();

在Activity中

点击事件:创建Fragment 继承类对象.

获取支持FragementManager.beginxXX再获取事务.

然后ft.replace(id,对象);最后ft.commit();

额外:一开始指定一个帧布局,在打开功能页面的时候就能显示它.

3.2 清理缓存的功能

什么是缓存:临时文件的的存储,当系统资源不足的时候 会回收缓存空间

①在缓存的Fragment里,扫描所有应用程序的缓存目录,如何实现?

查找源码(看看安卓自己是怎么做的):

在设置界面的应用程序可以看到每个应用程序的缓存内容,通过这一点去找到系统源码的setting源码,

如果直接把setting源码导入工程,会报错,因为它是在框架下进行编译的,依赖框架里的api,而工程里缺少很多系统底层开发的api,所以会报错。

查询源码:查找特定字符,根据特定字符去查找源码,ctrl+H搜索

一致追寻到获取缓存信息的代码.packageStats api

②代码获取缓存数据

PackagerManage pm

pm.getPackageSizeInfo();获取包大小信息,但是这个方法被隐藏了.

通过反射获取到这个方法//获取字节码对象,获取到所有方法

//其它自己探索

额外:注意权限问题

3.3 Fragment ui布局:(可以用ListView 也可以直接用LinearLayout填充空白数据)

②在Fragment 的onStart()方法编写获取所有应用程序的缓存

//获取所有包信息,根据包名,利用反射获取缓存信息.

③记得更新界面ui,扫描进度,扫描的文本,

判断是否存在缓存,存在缓存就把有缓存的消息(有缓存的AppLiaction和缓存大小,可以考虑创建一个对象去封装这些信息)发给主线程

要让条目点击发生状态改变,设置背景资源状态选择器

显示缓存的ui优化:参考ui.

4清除某一个程序的缓存信息

4.1

查看系统源码setting中清楚缓存的按钮点击事件中的代码逻辑

pm.deleteAppliCationCacheFile()//也是被隐藏的,通过反射去调用它

额外:注意权限异常。但是这个权限只能给系统app使用,所以这个逻辑无法实现

解决方式:曲线救国,用户如果点击了单个应用的清除缓存,就跳过setting的详细页面,让用户自己去实现这个清除功能。

4.2 BUG 如果到别的页面再返回清理缓存界面,旧数据和新数据都显示在页面上。

在onStart()//界面可见的时候,添加一条逻辑,每次可见就清空一次布局中的子控件

ll.reamoveAllViews();

5,清除全部缓存:安卓系统的漏洞:让系统发送广播,硬盘空间不够用,系统回收缓存。

实现方法:发送一个消息给操作系统,我要申请一个非常大的空间。就会回收缓存了。

实现步骤①:增加一个新按钮

②找到这个控件,点击的时候申请一个非常大的空间

PackageManager>>freeStorageAndNotify(申请空间,观察者接口);

//申请一个可用空间,观察者返回的是最大可申请空间(能返回多少返回多少)

这是一个隐藏的api

申请的空间,integer.MaxValue//2G,2的31次方 为2G

权限:CLEAR_APP_CACHE//安卓的漏洞,谷歌没有检查这个权限的使用app(system).

额外:清楚完缓存之后,清楚掉下面所有的子控件,从而更新界面显示。

6.SD卡清理:

扫描SD卡中的文件(递归遍历SD卡文件夹,筛选常见缓存文件拓展名.tmp.temp)

把遍历出来的缓存文件显示在界面上,用户可以手动清空所有文件(删除掉).

额外:市面上的清理SD卡还会根据一个数据库(储存市面上常见APP的缓存目录)来判断这个缓存文件属于哪一个APP来提示用户,提高用户体验

时间: 2024-12-21 14:27:49

手机卫士11_ 自定义控件_缓存清理_病毒库更新的相关文章

手机卫士05_背景资源_listview优化_进程查看

1.1添加黑名单的ui 拦截类型修改为一组RadioGroup,里面三个RadioButton,RadioGroup可以指定排列方式 其它的都简单,记得定义好ID,顺便抽取点样式就可以了,最后两个Button可以设置状态选择器. 如果不确定LinearLayout有多高,就设置为0dp,权重为1,这样它会自己去填充空白,而不是覆盖. 1.2 电话号码的文本输入框 1.2.1安卓下特殊的图片资源 .9.png 图片 安卓自带的工具:sdk-tools-draw0-pathch 如果是在两侧选定黑点

手机卫士10_widget_流量统计_手机杀毒

1._widget入门: 查看帮助文档>>Developrs>>API Guides>>App Widgets 实际上是一个迷你的应用程序VIew视图,嵌入在另外一个应用程序视图. 标准的android和兼容widget的手机才能显示,被修改过的系统是无法显示的. 实现步骤: ①创建类继承APPWidgetProvider//一个方便的帮助类,用来实现一个appwidget 它继承了广播接收者,实现原理也是通过广播实现的,特殊的广播接收者. ②在清单文件里配置广播接收者

手机卫士13_屏幕适配_异常处理_盈利模式_混淆加密

今天是手机卫士最后一天 1,简易屏幕适配: ①使用线性,相对,帧布局,这三种常用布局在所有设备上几乎可以完整实现,多使用dp,sp,不要使用像素,dp,sp会自动适应屏幕 ②浮动窗体显示的距离问题:它show出来的距离就是像素,所以显示距离不会适应屏幕. 代码里接收的单位一般都是像素. 解决方式:把输入的数字转换成dp单位. 得到像素密度*像素 获得dp数据,根据屏幕实现的像素效果 通过工具类去转换成dp数据DesityUtils 2,应用程序的异常处理: 2.1 alpha版本:小范围的内部测

手机卫士04_ 手机定位_超级管理员_数据库

1.1 定位功能简介: 常见的定位方式: ①网络定位:(IP地址),拨号上网一般是动态分配,如果网吧公司,就是静态分配的. 比较有名的数据库:纯真Ip数据库,有很多公开的ip信息 根据ip地址定位.可能很准确,也可能只是一个大概的范围 ②基站定位:必须有手机卡才能基站定位 根据手机与基站联系的信号强弱+算法定位. 定位效果:可能很准确,(与基站位置相关,周围基站越多越近效果越好.) ③GPS定位:采用卫星定位 利用卫星的位置与手机GPS模块的建立联系,通过算法判断位置. 至少需要三颗卫星,获取手

ehcache memcache redis 三大缓存男高音_转

ehcache memcache redis 三大缓存男高音 2013-01-16 15:43 10500人阅读 评论(2) 收藏 举报 最近项目组有用到这三个缓存,去各自的官方看了下,觉得还真的各有千秋!今天特意归纳下各个缓存的优缺点,仅供参考!  Ehcache 在java项目广泛的使用.它是一个开源的.设计于提高在数据从RDBMS中取出来的高花费.高延迟采取的一种缓存方案.正因为Ehcache具有健壮性(基于java开发).被认证(具有apache 2.0  license).充满特色(稍

Android 手机卫士17--缓存清理

清理单个应用缓存 通过反射调用方法 需要权限:android.permission.DELETE_CACHE_FILES. 以上权限为系统权限,手机卫士应用为用户应用,不能拿到此权限 换思路: 调用系统清除缓存的界面,让用户在系统清除缓存界面实现清除逻辑 查找系统清除缓存的界面方法:

12-JAVA清理_终结处理和垃圾回收

导论: 将一个对象初始化后就"弃之不顾"的做法并非总是安全的.虽然java用垃圾回收器回收无用对象占用的内存资源.但也有特殊情况, 假定对象并非使用new获得了一块"特殊"的区域,由于垃圾回收器只知道释放那些经由new分配的内存,所以他不知道该怎样释 放这块"特殊"的内存. 1.finalize() 此方法出现的原因:回收除以new方法创建对象方式以外的方式分配的内存 为了应对上面的那种情况,java允许在类中定义一个名为finalize()的方

手机安全卫士——缓存清理

CleanCacheActivity.java /** * 缓存清理*/ public class CleanCacheActivity extends Activity { private PackageManager packageManager; private List<CacheInfo> cacheLists; private ListView list_view; @Override protected void onCreate(Bundle savedInstanceStat

处理器(续)_缓存(cache)

4.处理器(续)_缓存(cache) 4.1硬件的处理速度 由于经济因素,处理器和内存所使用的半导体工艺不同,工艺的差异导致了处理器和内存的速度差异,处理器总是要等待内存,处理器速度远远大于内存.所以在两者之间增加缓存是及其必要的.通常:V处理 > V处理器内部寄存器 > V缓存 > V内存 > Vflash 4.2程序访问的局部性 程序运行时有一个特点,在短时间内,处理器访问的储存空间是一个很小的范围.A.时间局部性:某个存储单元在短时间内很可能被再次访问B.空间局部性:某个存储