我需要在用户打开我的应用后的5-10秒内获取设备上安装的所有应用的列表。
这是因为,它需要大约。对于我的Android应用程序的典型用户,请求5-10秒,以请求有关设备上安装的应用程序的信息。
为了相关,每次加载我的应用程序时,我都必须创建已安装应用程序列表的新副本。
然而,使用下面的代码在四核Android设备上花费超过30秒。 400个应用程序(系统和已安装 - 我需要两个)。
我在'on create'中执行了代码,但没有人会等待30秒才能打开应用程序。 所以我把它移到AsyncTask,所以我的应用程序打开immediadetelly。 但仍然需要+30秒;如果在加载列表之前有人要求提供特定的应用程序,他们可能无法获得正确的信息。
为什么这段代码这么慢?我该怎么做才能加快速度呢? 我会向任何可以提高10倍或者给我一个很好的小费的人支付金币。
final PackageManager pm = getPackageManager();
List<ApplicationInfo> packages = pm.getInstalledApplications(PackageManager.GET_META_DATA);
for (ApplicationInfo packageInfo : packages) {
InstalledAppsName.add(packageInfo.loadLabel(pm).toString());
CountApps=CountApps+1;
}
答案 0 :(得分:2)
请参阅PackageInfo LoadLabel slow performance
获取标签需要很长时间,因为(我认为)它需要从APK加载。您可以同时显示包名称,并逐步将其替换为标签。