这里主要针对Android 8.0 在PKMS这块的新变化进行分析,会不断更新
如果发现有错误或者不到位的地方,请指出,谢谢!
回忆一下在Android 7.0是如何扫描APK的:
private PackageParser.Package scanPackageLI(File scanFile, int parseFlags, int scanFlags,
long currentTime, UserHandle user) throws PackageManagerException {
......
PackageParser pp = new PackageParser();
......
final PackageParser.Package pkg;
try {
pkg = pp.parsePackage(scanFile, parseFlags);
}
......
return scanPackageLI(pkg, scanFile, parseFlags, scanFlags, currentTime, user);
}
这样,如果在系统预置APK较多的情况下,必然会导致开机时间变慢
在之前的项目中,我们都是自己加一个简单的多线程来扫描APK
在阅读8.0的代码时发现,google已经为我们添加了这个功能,而且比之前的方案更高端,详细看看
在private void scanDirLI(File dir, int parseFlags, int scanFlags, long currentTime)方法中:
private void scanDirLI(File dir, int parseFlags, int scanFlags,

本文分析了Android 8.0中PKMS的改进,特别是引入了多线程扫描APK以提高效率。对比Android 7.0,8.0通过ExecutorService启动线程池,使用ArrayBlockingQueue确保线程安全。虽然默认只有4个线程,但在特定情况下可以考虑增加线程数以优化开机速度。
最低0.47元/天 解锁文章
1145

被折叠的 条评论
为什么被折叠?



