在做一个应用时,实现一个功能:查询Android手机上安装的所有APK,并与本应用中的数据库做对比,如果存在则从数据库中取出这个APK的更多信息。部分代码如下:
for (String one : installedApps) {
App app = mDataSource.getApp(one);
if (app == null)
continue;
PackageInfo pi = AppUtils.getPackageInfo(one);
if (pi != null) {
app.versionCode = pi.versionCode;
app.versionName = pi.versionName;
result.add(app);
}
}
return result;
installedApps 是已经获取到手机上安装应用的包名列表
mDataSource 是数据库的实例,通过包名可以查询返回一个自定义对象App
实现以后,发现在查询时,会很卡。经过打点,在查询数据库时,会有2s多的执行时间。这肯定是不能接受的。经过后来优化,改成如下代码:
List<String> installedApps = AppUtils.getInstalledApps();
return mDataSource.getApps(installedApps);
性能一下就好了很多,发现在调用时不再有明显卡顿。以前的方法有个缺点就是手机有N个应用时,会查询N次数据库,而第二次方法,只会查询一次数据库,性能也提高了不少。
刚开始在解决卡顿问题,并没有认为问题会出在查询数据库这里,通过对代码块打执行时的时间戳才发现问题所在。
记录下来,时刻提醒自己
网友评论