【发布时间】:2016-12-29 21:45:24
【问题描述】:
我正在使用 PackageStats 并在打印 PackageStats 的 codeSize、cacheSize、dataSize 时,有些数据是负数。
几个问题:
- 这怎么可能?
- 考虑到 apk 大小约为 50MB,在哪些情况下 codeSize 可能为负数?
- 还有其他方法可以可靠地提取上述信息吗?
另外,对于 Android N,它给了我“NoSuchMethodException”。所以,
- 它是为 Android N 移除的还是有什么方法可以使用它?
- 是否有任何替代方法可以帮助我计算上述尺寸?
代码:
PackageManager packageManager = context.getPackageManager();
Method myUserId = UserHandle.class.getDeclaredMethod("myUserId");
int userID = (Integer) myUserId.invoke(packageManager);
Method getPackageSizeInfo = packageManager.getClass().getDeclaredMethod("getPackageSizeInfo", String.class, int.class,
IPackageStatsObserver.class);
getPackageSizeInfo.invoke(packageManager, context.getPackageName(), userID, new IPackageStatsObserver.Stub() {
@Override
public void onGetStatsCompleted(PackageStats pStats, boolean succeeded) throws RemoteException {
long codeSize = pStats.codeSize / MB; //long MB = 1024*1024;
long cacheSize = pStats.cacheSize / MB;
long dataSize = pStats.dataSize / MB;
long appSize = codeSize + cacheSize + dataSize;
};
}
【问题讨论】:
-
您能否添加一个代码示例,包括您如何显示/检查该值以及对该值执行的任何计算?
-
好的。除了 1 之外,我没有执行任何计算,其中我将值除以 1024*1024 以获得以 MB 为单位的值。
标签: java android android-7.0-nougat