cache clean 方面的总结

来源:互联网 发布:mysql concat 加换行 编辑:程序博客网 时间:2024/06/05 17:01

1.扫描手机app占用的cache

先要通过packageManager获取到所有手机上已安装的全部app

算出每个app的cache: 通过app的包名在PackageStub勒种通过反射方法获取到cacheSize


2.清理cache

分为直接清理cache  (6.0之下, 6.0对应的是Android23)

 使用accessibility权限进行清理cache

直接清理主要思想还是用反射的方法,用反射的方法获取到 PackageManager的

freeStorageAndNotify方法

方法参数中的cache值要大学需清理的cache,否则如果判断真实的cache比参数值大的话,就不会清理,所以反射方法中的值尽量给个大值,即可清理了所有app包的cache数据

这里如果无法确定最大值需要设多大 可以从小的开始进行判断,如果没符合要求,在继续往下走

这就是直接清理

为了防止清理未彻底 可以在Android/data目录下找app的cache文件,将cache文件删除即可

2. 使用accessbility进行清理

1.判断本应用是否有accessibility权限,(可通过Settings.Secure.getInt() 方法判断,参数为Settings.Secure.ACCESSIBILITY_ENABLED

如果有accessibility权限,则开始进行清理:

通过Intent 打开setting 页,action_application_Details_settings 

通过uri指向包名为我们将要清理cache的包名,即可打开应用设置页中对应的应用

这时候就可以进行清理,主要是借助accessibility的回调,获取到设置页中所有的元素,在这些元素中通过id或者显示字符串,找出清理cache的按钮,(因为Android rom可以自定义,所以使用id获取的按钮不准确,所以我们用字符创进行按钮的获取)

需要继承

AccessibilityService

继承onAccessibilityEvent  方法 ,参数event,event.getsouce我们可以获取到AccessibityNodeInfo,也及时每个节点的信息,通过节点的信息找到清理缓存的节点。

对node进行模拟点击从操作,node.performAction(AccessibilityNodeInfo,ACTION_CLICK) 点击后即可完成app的清理缓存操作


知识点:

反射:

 主要是指程序可以访问,检测和修改它本身状态或行为的一种能力,并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义

通过反射可以访问对象的属性,方法,构造方法等。

反射方法获取类有三种方式

1.  = Class.forName(“类名”)

2 = 类名.class

3.= 对象.getClass()

获取类之后创建对象

c.newInstance () 调用类的默认构造函数

获取类中所有的成员变量

 c.getDeclaredFields();   返回Field[]

每个field 都可以通过获取访问权限,成员变量的类型,成员变量的名称

也可通过变量名获取某一个成员变量 : c.getDeclaredField("变量名");

获取的变量.setAccessible(true)  可以打破封装,使此变量不安全

  获取的变量.set(类的对象, "110"); //set   可以设置对象中不安全变量的值


2.accessibility的简介

google开放出来主要是为了方便残疾人使用,通过获取accessibility 可以在安卓系统中随意打开页面也可以进行按钮点击,

但是好多人用来进行灰色操作,比如自动安装软件,自动清理cache 等,抢红包等。

accessibility实现只需三部分:

1.继承 accessibityservice 

2.在 onAccessibilityEvent 可以接受到监听页面的事件,通过事件可以获取本页面所有的nodeInfo

3.在Menifest中注册

原创粉丝点击