zoukankan      html  css  js  c++  java
  • 手机卫士11_ 自定义控件_缓存清理_病毒库更新

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

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

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

    通过 MD5 或者ASH1获取特征码

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

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

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

    连接服务器: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,231次方 为2G

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

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

    6.SD卡清理:

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

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

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

  • 相关阅读:
    Delphi制作带图标的弹出式选单 DELPHI
    在DBGrid中实现Copy、Paste功能 DELPHI
    使用stringgrid的例子 DELPHI
    取得某一dll所有输出函数名 DELPHI
    HDOJ 2512 一卡通大冒险
    POJ 2533 Longest Ordered Subsequence
    UVA 10795 A Different Task
    HDOJ 1505 City Game
    HDOJ 1864 最大报销额
    HDOJ 1421 搬寝室
  • 原文地址:https://www.cnblogs.com/adventurer/p/5605434.html
Copyright © 2011-2022 走看看