安卓开发之清理手机应用程序缓存
来源:互联网 发布:淘宝破损补寄怎么设置 编辑:程序博客网 时间:2024/06/03 00:13
清理手机应用程序缓存。
拿到模块后,先实现UI界面。界面实现后开始思考整个模块要实现的功能,然后是要使用的API。
第一步:先拿到包管理器
PackageManager pm=getPackageManager();
第二步:利用包管理器拿到所有安装在手机上的apk包信息的集合
pm.getInstalledPackages(0);
第三步:遍历包信息 查看每个包信息的缓存信息。
第四步:查询源码后我们知道了通过包管理的getPackageSizeInfo方法可以得到应用程序的缓存大小。
getPackageSizeInfo(String packageName, IPackageStatsObserver observer)
第五步:由于这个方法加了这样一个注解“@hide”,所以被隐藏了,所以我们要用反射来使用这个方法。
Method method=null;
Method[] methods = PackageManager.class.getMethods();
for(Method m:methods){
if("getPackageSizeInfo".equals(m.getName())){
method=m;
}
}
第六步:得到这个方法后,我们知道使用这个方法需要一个服务的接口对象,所以我们应该得到这个对象,
我们查找源文件得到aidl文件复制到工程里,然后创建接口对象。
IPackageStatsObserver.aidl IPackageDataObserver.aidl
使用远程服务需要aidl文件,找到aidl文件后建好相应的包名后,就可以开始使用这个方法了。
第七步:实现IPackageStatsObserver接口的实现类。
通过源码我们已经知道通过PackageStats可以得到应用程序的大小,缓存大小,代码的大小。
class myDataObserver extends IPackageStatsObserver.Stub{
@Override
public void onGetStatsCompleted(PackageStats pStats, boolean succeeded)
throws RemoteException {
}
}
第八步:开始实现逻辑,更新UI。
第九步:需要权限。GET_PACKAGE_SIZE
第十步:一键清理全部缓存
利用反射得到清理缓存的方法freeStorageAndNotify(long freeStorageSize, IPackageDataObserver observer)
需要权限:android.permission.CLEAR_APP_CACHE.
PackageManager pm = getPackageManager();
List<PackageInfo> installedPackages = pm.getInstalledPackages(0);
Method[] methods = PackageManager.class.getMethods();
Method method = null;
for(Method m:methods){
if("getPackageSizeInfo".equals(m.getName())){
method=m;
}
}
for(PackageInfo packageinfo:installedPackages){
try {
method.invoke(pm,packageinfo.packageName, new myDataObserver());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
class myDataObserver extends IPackageStatsObserver.Stub{
@Override
public void onGetStatsCompleted(PackageStats pStats, boolean succeeded)
throws RemoteException {
}
}
拿到模块后,先实现UI界面。界面实现后开始思考整个模块要实现的功能,然后是要使用的API。
第一步:先拿到包管理器
PackageManager pm=getPackageManager();
第二步:利用包管理器拿到所有安装在手机上的apk包信息的集合
pm.getInstalledPackages(0);
第三步:遍历包信息 查看每个包信息的缓存信息。
第四步:查询源码后我们知道了通过包管理的getPackageSizeInfo方法可以得到应用程序的缓存大小。
getPackageSizeInfo(String packageName, IPackageStatsObserver observer)
第五步:由于这个方法加了这样一个注解“@hide”,所以被隐藏了,所以我们要用反射来使用这个方法。
Method method=null;
Method[] methods = PackageManager.class.getMethods();
for(Method m:methods){
if("getPackageSizeInfo".equals(m.getName())){
method=m;
}
}
第六步:得到这个方法后,我们知道使用这个方法需要一个服务的接口对象,所以我们应该得到这个对象,
我们查找源文件得到aidl文件复制到工程里,然后创建接口对象。
IPackageStatsObserver.aidl IPackageDataObserver.aidl
使用远程服务需要aidl文件,找到aidl文件后建好相应的包名后,就可以开始使用这个方法了。
第七步:实现IPackageStatsObserver接口的实现类。
通过源码我们已经知道通过PackageStats可以得到应用程序的大小,缓存大小,代码的大小。
class myDataObserver extends IPackageStatsObserver.Stub{
@Override
public void onGetStatsCompleted(PackageStats pStats, boolean succeeded)
throws RemoteException {
}
}
第八步:开始实现逻辑,更新UI。
第九步:需要权限。GET_PACKAGE_SIZE
第十步:一键清理全部缓存
利用反射得到清理缓存的方法freeStorageAndNotify(long freeStorageSize, IPackageDataObserver observer)
需要权限:android.permission.CLEAR_APP_CACHE.
PackageManager pm = getPackageManager();
List<PackageInfo> installedPackages = pm.getInstalledPackages(0);
Method[] methods = PackageManager.class.getMethods();
Method method = null;
for(Method m:methods){
if("getPackageSizeInfo".equals(m.getName())){
method=m;
}
}
for(PackageInfo packageinfo:installedPackages){
try {
method.invoke(pm,packageinfo.packageName, new myDataObserver());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
class myDataObserver extends IPackageStatsObserver.Stub{
@Override
public void onGetStatsCompleted(PackageStats pStats, boolean succeeded)
throws RemoteException {
}
}
0 0
- 安卓开发之清理手机应用程序缓存
- 安卓学习之(清理缓存)
- [安卓]手机管家(二十) 缓存清理
- 安卓开发如何清理应用缓存和数据
- android开发之清理缓存
- 安卓系统清理蓝牙缓存
- 安卓轻松实现清理缓存
- 安卓开发之 四 定时清理问题
- 清理应用程序缓存
- 清理应用程序缓存
- 清理手机缓存
- 手机清理缓存文件
- 安卓开发之手机连接电脑
- Android开发之----客户端清理缓存
- 安卓应用程序开发
- Android之——清理手机SD卡缓存
- 清理app应用程序的缓存
- iOS开发清理缓存
- 反射+多态:生成容器实例化并装好view子类
- Android系统启动过程
- UML
- 小凡实验室卧龙老师CCIE学习方法:CCIE涅槃五剑
- sql简单语句
- 安卓开发之清理手机应用程序缓存
- wikioi天梯之1475 m进制转十进制
- 第四周作业:图的表示
- MySQL 5.0 游标基础
- jsp 用户上传头像、上传图片、邮件上传附件代码
- win8推荐浏览器
- nc.exe(Netcat) 瑞士军刀
- 算法实验题 车皮编序问题(转化为在全排列的基础上的堆栈问题)
- iOS view 自适应屏幕问题