对查询数据库的优化

2019-04-28  本文已影响0人  心随你咚

在做一个应用时,实现一个功能:查询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次数据库,而第二次方法,只会查询一次数据库,性能也提高了不少。
刚开始在解决卡顿问题,并没有认为问题会出在查询数据库这里,通过对代码块打执行时的时间戳才发现问题所在。

记录下来,时刻提醒自己

上一篇 下一篇

猜你喜欢

热点阅读