也许有人还不知道,Android 是有一些内建的 类库支持 SQL Lite 数据库的操作。他提供了一个很好的方式在 Android 上组织少量的数据。不管怎样,在使用这些类库的时候有一些陷阱是需要注意的。

根据你所使用的版本不同,一个相同的查询的运行时间可能从几毫秒到几分钟不等。例如,一个查询可能在 Galaxy S2 运行少于一秒(在 iPhone 4 上可能更快),但是在 Atrix 2 和 HTC Desire 上运行却需要一分钟。所有这些手机都有类似的硬件,那么区别在哪里?

在对代码研究了几天后,我发现问题在于查询语句的设计。当你使用大量的 joins 或者 unions 的时候,问题就出现了。组合一张大的数据表和一张或多张中等大小的数据表,需要非常小心的优化来保证在所有的设备上都有良好的性能。在做 unions 或者 joins 之前限制数据表的大小很重要!

我们以下面的数据库和数据表为例:

· 一张 Person 表,有 name, height, age 等字段

· 一张 Family 表,包含了家庭的详情

· 一张 City 表,包含了所有城市的信息

在 Android 上面把所有这些表联合起来(假设 Person 表有超过2000条记录)在大部分设备上是没有问题的。但是假如你的用户正在使用一个老版本的 SQL Lite 版本,你的应用就慢的无法使用了。你要尽量让 join 的记录越少越好以保证性能。例如,你从 Person 表中抽取一部分记录再做 join,性能就会好很多。

这里的难点是如何知道用户使用的是什么版本的 SQL Lite。虽然 Android 有一个默认的版本,但是似乎不同的厂商在不同的设备上用了不同的 SQL Lite 版本。这就给我们造成了很大的麻烦。

在 StackOverFlow 上有一些关于这方面的信息。总之尝试去获得设备的 SQL Lite 版本是很困难的,你最好还是把力气花在优化 SQL 上面,以保证在所有的设备上都有良好的性能。

还有一个有趣的地方就是 Android 上面,一条查询究竟是何时被执行的。也许你认为当你获得Cursor 对象的时候,查询就执行完了。但事实情况是,查询不会被执行直到 Cursor 被第一次访问,例如 moveToNext,moveToFirst 操作。所以请不要在 UI 线程或者相关的线程中使用 cursor,否则界面会卡死。

Android上的SQLLite性能分析的更多相关文章

  1. Linux性能分析工具的安装和使用

    转自:http://blog.chinaunix.net/uid-26488891-id-3118279.html Normal 0 7.8 磅 0 2 false false false EN-US ...

  2. iocp性能分析

    网络上找iocp性能分析的文章很少,因工作关系,花了点时间特意从客观数据和理论角度分析了下iocp的性能 环境 CPU i7 4核8线程 1G网卡,echo方式测试(一个客户机模拟多个客户端模式,模拟 ...

  3. Android开发之Java集合类性能分析

    对于Android开发者来说深入了解Java的集合类很有必要主要是从Collection和Map接口衍生出来的,目前主要提供了List.Set和 Map这三大类的集合,今天Android吧(ard8. ...

  4. Android APP性能分析方法及工具

    近期读到<Speed up your app>一文.这是一篇关于Android APP性能分析.优化的文章.在这篇文章中,作者介绍他的APP分析优化规则.使用的工具和方法.我觉得值得大家借 ...

  5. android 性能分析案例

    本章以实际案例分析在android开发中,性能方面的优化和处理.设计到知识点有弱引用,memory monitor,Allocation Tracker和leakcanary插件. 1.测试demo ...

  6. Android性能分析之TraceView的使用

    TraceView简介 TraceView是AndroidSDK里面自带的工具,用于对Android的应用程序以及Framework层的代码进行性能分析. TraceView是图形化的工具,最终它会产 ...

  7. 正确使用Android性能分析工具——TraceView

    http://blog.jobbole.com/78995/     首页 最新文章 IT 职场 前端 后端 移动端 数据库 运维 其他技术 - 导航条 - 首页 最新文章 IT 职场 前端 - Ja ...

  8. Cocos2d-x性能分析-Android版本之Gprof

    在 iOS 平台下我们可以用 Xcode 自带的 Profile 工具来测试我们程序的性能,Android 平台使用的 gprof 这里整理了一下具体的cocos2dx 使用gprof进行性能分析的具 ...

  9. 关于React Native项目在android上UI性能调试实践

    我们尽最大的努力来争取使UI组件的性能如丝般顺滑,但有的时候这根本不可能做到.要知道,Android有超过一万种不同型号的手机,而在框架底层进行软件渲染的时候是统一处理的,这意味着你没办法像iOS那样 ...

随机推荐

  1. 答 “SOA会不会造成IT黑洞?”

    [文/ 任英杰] 随意间看到支点网的“SOA会不会造成IT黑洞”一文,作者对SOA的认识颇有以偏概全之嫌,写点自己的感想,作为应和吧. 作者的二个对SOA的观点有些偏颇:“SOA就是一种系统集成,它是 ...

  2. DouNet学习_Excel导入导出

    Excel --->列是有限的 -->数据靠在单元格右边是数字类型,左边是字符串类型 把一个数字当初字符串来显示 在前面加个 ' -->用程序操作Excel 可以使用Excel的所有 ...

  3. mysql数据库修改密码

    更改MySQL用户密码 方法1: 用SET PASSWORD命令 首先登录MySQL. 格式:mysql> set password for 用户名@localhost = password(' ...

  4. 更改VS的运行主窗体

    Program.cs中Application.EnableVisualStyles();              Application.SetCompatibleTextRenderingDefa ...

  5. js中location.search、split()HTML5中localStorage

    1. location.search在客户端获取Url参数的方法 location.search是从当前URL的?号开始的字符串 如:http://www.baidu.com/s?wd=baidu&a ...

  6. Python伪开发者对于搜狐云景的测评

    Python伪开发者对于搜狐云景的测评 本人是GAE和OpenShift的狂热爱好者,玩过各种国外PaaS.某次想搞个稍微复杂点的Python Web程序,需要比较好的网络传输速度,就试图找前PM(P ...

  7. (phpmyadmin error)Login without a password is forbidden by configuration (see AllowNoPassword) in ubuntu

    1.Go to /etc/phpmyadmin/config.inc.php and open it your favorite editor. 2.Search for below line of ...

  8. samba服务设置,Linux系统和Windows文件共享

    samba是一个工具套件,在Unix上实现SMB(Server Message Block)协议,或者称之为NETBIOS/LanManager协议.SMB协议通常是被windows系列用来实现磁盘和 ...

  9. C++builder XE 安装控件 及输出路径

    C++builder XE 安装控件 与cb6不一样了,和delphi可以共用一个包. 启动RAD Studio.打开包文件. Project>Options>Delphi Compile ...

  10. 【转】Eclipse去除js(JavaScript)验证错误

    这篇文章主要是对Eclipse去除js(JavaScript)验证错误进行了介绍.在Eclipse中,js文件常常会报错.可以通过如下几个步骤解决 第一步:去除eclipse的JS验证:将window ...