Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android PackageStats提供负值_Java_Android_Android 7.0 Nougat - Fatal编程技术网

Java Android PackageStats提供负值

Java Android PackageStats提供负值,java,android,android-7.0-nougat,Java,Android,Android 7.0 Nougat,我正在使用PackageStats,在打印PackageStats的codeSize、cacheSize、dataSize时,一些数据是负数 有几个问题: 这怎么可能 考虑到apk大小约为50MB,代码大小可能为负值的情况是什么 是否有其他方法可以可靠地提取上述信息 另外,对于Android N,它给了我“NoSuchMethodException”。所以 它是为安卓N删除的还是有办法使用它 有没有其他方法可以帮助我计算上述尺寸 代码: 刚刚在API 23/24上试用过,可以直接进行实例

我正在使用PackageStats,在打印PackageStats的codeSize、cacheSize、dataSize时,一些数据是负数

有几个问题:

  • 这怎么可能
  • 考虑到apk大小约为50MB,代码大小可能为负值的情况是什么
  • 是否有其他方法可以可靠地提取上述信息
另外,对于Android N,它给了我“NoSuchMethodException”。所以

  • 它是为安卓N删除的还是有办法使用它
  • 有没有其他方法可以帮助我计算上述尺寸
代码:


刚刚在API 23/24上试用过,可以直接进行实例验证

这些
external*
属性可能涉及SD卡

    PackageStats stats = new PackageStats(context.getPackageName());
    long codeSize  = stats.codeSize + stats.externalCodeSize;
    long dataSize  = stats.dataSize + stats.externalDataSize;
    long cacheSize = stats.cacheSize + stats.externalCacheSize;
    long appSize   = codeSize + dataSize + cacheSize;

能否添加一个代码示例,包括如何显示/检查该值以及对该值执行的任何计算?确定。我没有执行任何计算,除了1,其中我将值除以1024*1024,得到以MB为单位的值。我同意你的看法。另一种方法是如果它超过了可能的长度。你所说的只是实例它是什么意思?@the face with“just instance it”我指的是
new
关键字-不带
invoke()
onGetStatsCompleted()
。负值基本上只适用于有符号整数,因此最大值可能不是4294967295,而是2147483647(而-2147483647可能只是指示错误或缺少值)。。。虽然哪个用户运行代码确实很重要,但由于存在应用程序、用户专用存储和用户共享存储,并且用户专用区域的大小可能会有所不同。您是否可以共享确切的命令来获取大小(正如您在onGetStatsCompleted中所建议的,不需要),它每次都为零。我怀疑它是否有效,因为如果它如此简单,每个人都会使用它。只有实例化永远不会给出应用程序的大小。查看PackageManagerService类的第16562行,您可以在其中找到如何初始化包大小。大小的实际计算是在Installer类中完成的
    PackageStats stats = new PackageStats(context.getPackageName());
    long codeSize  = stats.codeSize + stats.externalCodeSize;
    long dataSize  = stats.dataSize + stats.externalDataSize;
    long cacheSize = stats.cacheSize + stats.externalCacheSize;
    long appSize   = codeSize + dataSize + cacheSize;