1、 手机中的缓存一般放在手机中data/data/的项目/cache当中,cache文件是可不读不可写,所以不能直接获取
2、可以在源码中找到 mPm.getPackageSizeInfo(包名, mStatsObserver);
3、getPackageSizeInfo的方法已经被隐藏了,只能采用反射来获取:需要导入这两个aidl文件
IPackageStatsObserver.aidl 和 PackageStats.aidl
1?? 获取到packagemanager管理器对象,
public static void getCacheSize(final Activity context, String packName,final OnGetCacheSizeListener listener) {
PackageManager pm = context.getPackageManager();
2?? 使用反射
// 1. class
Class<? extends PackageManager> clazz = pm.getClass();
// 2. method
Method method = clazz.getDeclaredMethod("getPackageSizeInfo",
new Class[] {String.class,IPackageStatsObserver.class});
// 3. obj pm
已经获取到了任务管理器
//为了获取到回调,定义了一个接口
IPackageStatsObserver.Stub mStub = new IPackageStatsObserver.Stub() {
@Override
public void onGetStatsCompleted(PackageStats pStats, boolean succeeded)
throws RemoteException {
//回调结果
final long cacheSize = pStats.cacheSize;
//因为修改了UI界面,所以不能在子线程中运行,创建一个UI线程使其在主线程中修改
context.runOnUiThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
listener.getCacheSize(cacheSize);//把结果回调给用户
}
});
// 4. invoke
method.invoke(pm, new Object[]{packName,mStub});
}
3?? 定义一个接口
public class GetAppCacheMessageUtils {
public interface OnGetCacheSizeListener{
void getCacheSize(long cacheSize);
}