安卓开发之清理手机应用程序缓存

来源:互联网 发布:淘宝破损补寄怎么设置 编辑:程序博客网 时间: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 {

}

}
0 0
原创粉丝点击