android数据库操作优化(一)

Android U盘多媒体扫描优化实战:如何让MediaScanner提速50%? 本文深入剖析了Android系统中MediaScanner扫描U盘多媒体文件缓慢的根源,并提供了两套核心优化方案。通过改造MediaProvider实现数据库按U盘隔离,以及利用广播机制实现应用层提前响应与增量加载,可将扫描等待时间显著降低约50%,极大提升车载娱乐、广告机等嵌入式设备的用户体验。 阅读详情

        这是我今年陆陆续续写的有关android上数据库操作的文章,以前都发布在开发论坛上,现在把整理到这里。

        1.由于SQLiteDatabase对象较为耗费资源,所以我们在使用完SQLiteDatabase对象之后,必须立即关闭它,避免它继续占用资源,否则我们继续程序可能会导致OOM或者其他异常;

        2.同理,我们在使用完cursor之后也应该立即关闭cursor,避免资源浪费;

        3.我们在关闭数据库之前,必须将取得的数据保存到Map或者List中,否则关闭数据库之后,数据也会随之消失;

        4.使用明确的查询语句,在数据库的查询中避免使用select * from table这样的语句,我们一般不会用到全部的数据,但这样查询不仅浪费时间,也浪费android有限的内存,所以我们必须明确查询目标,例如:select id,name from people;

        5.在较为频繁的数据库操作中(例如批量插入数据),可以使用数据库事物来处理频繁操作(如果只有一个数据操作,则android默认使用事物);

        6.在sqlite数据库中使用索引,给经常查询的列创建索引,但索引不适用于较大的数据库,较大的数据库创建索引会耗费太多的时间,而且每次改动一条数据,整个索引都将重新创建;

        7.如果需要在pc上制作数据库db文件,推荐使用Navicat Premium,功能强大,但是费用也很强大,不过可以免费试用;

        8.制作本地数据库db文件的时候,需要使用UTF-8编码(很多pc端sqlite3工具不支持utf-8编码或者保持和系统编码一致),否者在取数据的时候会出现乱码,另外,根据我们使用的pc数据库文件不同,我们可能会生成不同的sqlite3数据库的后缀文件,例如.s3db文件,这个其实没有影响,android数据库会识别它的,如果你感觉别扭,可以手动改为.db就可以了,这也是没关系的;

        9.制作本地数据库还有一点比较重要的就是默认主键必须为“_id”并设置为自动增长,不可以是其他的,而且每个表都必须有,如果你的数据库没有这个主键,在你的app运行中会报错,日志提示缺少“_id”字段,至于为什么应用内创建数据库不会产生这样的问题,那是因为android系统默认在创建数据库的时候就是为“_id”为主键的,即使你没有写这样的创建语句;

        10.还有好多人不知道怎么将mysql或者execl中的数据导入到sqlite3数据库中,这里我提供一个思路,可以将execl另存为csv文件,大部分数据库也可以直接到处csv格式的文件,然后我们用记事本打开csv文件就会发现里面就是inert into table values();可以直接放入values的部分,可以用java程序写一个批量插入语句即可制作sqlite3 db数据库文件;

        11.制作好的sqlite3 db数据库文件应该放在项目的assets文件夹或者res/raw文件夹中,然后在app启动的过程中将数据库用java io流复制到data/data/packagename/database目录中(注意,如果你的db数据库文件较大,请放在内存卡或者其他外存中);

        12.如果你不想自己在sd卡上面的数据库被普通文件浏览器(android)直接扫描到,可以在sd中新建一个文件夹,并以”.“开头,这样的文件夹会被大部分的文件浏览器过滤掉不显示;

        13.为了防止你的db数据库文件被其他有心人获取,你也可以将自己的数据库的后缀伪装成其他文件,例如.mp3,.dat之类的,但是需要注意的是,db文件会在应用打包生成apk的时候被压缩(可以有效减少apk的体积),如果是mp3之类的文件的话,则不会被压缩,经笔者测试,改为.dat格式也是可以被压缩的,或者将db文件复制到sd卡的时候再改名为其他后缀;

        14.如果数据库中的信息比较敏感,大家也可以在加密数据之后再存入数据库,取数据的时候在应用内解密,当然网上还有一些其他的加密手段,但是这些加密无一例外的都会牺牲掉更多相应时间和内存资源,所以大家在规划app的时候必须自己考虑清楚。

使用 GreenDAO 构建高效 Android 数据库操作 创建 PersonDB.java 文件中,定义 GreenDAO 注解的实体类。通过 GreenDAO,可以轻松实现高效的数据库操作,简化开发流程并提升应用性能。本文介绍了如何在 Android 项目中集成 GreenDAO,定义实体类,生成 DAO 类以及进行基本的数据库操作。希望这篇文章能帮助你在项目中更好地使用 GreenDAO,实现高效的数据持久化管理。 阅读详情

相关推荐

Android数据库操作入门及实践示例

SQLite是一个轻量级的数据库系统,它不依赖于服务器或系统管理员,可以直接嵌入应用程序中。它是世界上使用最广泛的数据库引擎,特别适用于移动和嵌入式系统。

weixin_30661119的博客 1113

Navicat查看.db文件

点击左上角的”链接“选项,如下图所示。在下拉列表中选择“SQLite”,在弹出的“SQLite”对话框中,

u010804417的博客 2万+

安卓Android源码项目——仓库管理系统源码深入解析

本文还有配套的精品资源,点击获取 简介:本项目是学习和实践安卓应用开发的完整源码,提供仓库管理功能,包括入库、出库、库存盘点等操作。通过这套源码,开发者可以深入理解Android应用的架构、数据库操作和UI实现。项目结构清晰,包括主工程、UI组件、数据存储、模型、适配器、网络请求、权限管理、业务逻辑以及测试等方面,旨在帮助开发者提升实战经验。 1. 安卓应用开发学...

weixin_32099703的博客 3014

*.db 文件,如何在navicat 这个软件打开

java

一天不写代码难受的博客 1万+

Android中使用ORMlite进行数据库操作的实战教程

ORMlite 是一款轻量级的ORM框架,它是为Java和Android开发设计的,旨在简化数据持久化的过程。ORMlite 的核心思想是将Java对象映射到数据库中的表,从而减少直接操作数据库的复杂性和提高开发效率。在ORMlite中,实体类通常用一个普通的Java类来表示,并通过注解来配置其与数据库表的映射关系。创建一个实体类需要考虑几个关键点:字段名、数据类型以及主键等。下面是一个简单的用户信息实体类的示例,包含用户名、密码和邮箱等属性。

weixin_33193177的博客 1077

Android数据库操作:greenDAO入门与实践

greenDAO是一个高效的对象关系映射(ORM)库,专门为Android平台设计,以Java对象的形式对SQLite数据库进行操作。它的主要特点包括轻量级、性能高效、代码生成等,通过减少样板代码,greenDAO极大地简化了数据库操作流程,降低了内存使用,并且在保证数据一致性的前提下,优化了查询和存储过程。在greenDAO中,实体类是一个普通的Java对象,它通过注解与数据库中的表关联起来。这种映射关系使得开发者无需直接编写SQL语句就能进行数据库操作。

weixin_29885875的博客 625

Android数据库的使用

前言 对于Android开发开说数据库应该很熟悉了,但是要从实际操作的角度来说,可能未必能够熟练的使用。当然,不是所有的APP都需要使用数据库,因为这个东西确实比较重。但是如果碰到一些特别大的项目尤其是包含即时通讯,消息,频繁的大数据的存储和操作,基本上都会使用数据库,比如:银行类APP,聊天类APP,大型官网的APP。此类型的项目中需要对数据库进行统一封装:数据库的创建,表格创建,数据库的增,删,改,查,以及更新数据库等操作。话不多说,直接从代码的角度去从头开始撸起来! 一、数据库的...

lk2021991的博客 3988

Android SQLite数据库操作及ListView性能优化实战

SQLite是一个软件库,实现了一个小型、快速、全功能、高可靠性的SQL数据库引擎。它是嵌入式应用的理想选择,因为它不需要一个单独的服务器进程或系统来运行,可以直接集成到应用中。由于其轻量级的特性,SQLite广泛应用于移动开发,特别是在Android平台。有时候,内置的列表项布局不能满足我们的需求。在这种情况下,我们可以定义自己的XML布局文件,并通过自定义适配器来加载它。例如:然后在自定义的ArrayAdapter中引用这个布局:@Override。

weixin_42596011的博客 806

Android之SQLite数据库使用

SQLite是Android系统集成的一个轻量级的数据库。Android提供了SQLiteDatabase代表一个数据库(底层就是一个数据库文件),一旦应用程序获得了代表指定数据库的SQLiteDatabase对象,接下来可通过SQLiteDatabase对象来管理、操作数据库了。

qq_38056514的博客 7380

Changer: Feature Interaction Is What You Need forChange Detection

还有“交换“交互是一种完全不需要参数和计算的操作,它是通过交换空间或通道维度上的双时态特征映射来实现的,交换的特征在经过后续的卷积或令牌混合时进行混合。方法二:提出了两种简单的交互策略,AD和特征“交换”,大量的实验表明,它们可以极大地提高MetaChanger的性能,特别是特征“交换”,即使嵌入到复杂的网络中或应用于具有挑战性的数据集。在这里,我们用虚线勾勒本文的重点。这是变化检测任务的基本问题,双时相图像提供了同一地区在不同时间点的图像数据,通过对比这两个时间点的图像,我们可以检测出该地区的变化。

yokon的博客 1622

卡门涡街可视化实战:从网格加密策略到动画后处理技巧

本文详细介绍了利用ANSYS Fluent进行卡门涡街可视化模拟的全流程,包括网格加密策略、求解器设置、涡街捕捉及动画后处理技巧。通过计算流体力学(CFD)方法,帮助工程师和研究人员高效模拟圆柱绕流现象,优化工程设计。

weixin_29309785的博客 414

Android开发——SQLite数据库的使用

在Android中应用程序需要处理大量并发连接、高并发读写等高负载场景,SQLite可能会表现出性能瓶颈,不如传统的关系型数据库管理系统(RDBMS),因此不建议在这些场景中使用SQLite。SQLite是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。我们先需要建立一个数据库对象,以读的方式打开,并指定数据库的位置。在onCreate方法里面,防止第一次点击的时候,没有user.db这个文件,因此写了一个创建db文件的代码。当表头为null的时候为全部读取。

Krisit的博客 5333

深入解析PCIe Retimer:工作原理与典型应用场景

本文深入解析了PCIe Retimer的工作原理与核心价值。作为高速信号的中继再生器,Retimer通过时钟数据恢复和信号再生技术,有效解决长距离或复杂通道中的信号衰减与完整性问题,从而极大地扩展了PCIe链路的有效传输距离。文章详细阐述了其内部架构、自动与手动两种工作模式,并重点介绍了在长距离板间互连、复杂背板设计等典型应用场景中的关键作用。

weixin_29195615的博客 507

Android开发性能优化总结(一)

安卓开发应用首先要讲究良好的用户体验,如果一款软件卡顿现象严重,不流畅,经常崩溃,那么将给用户带来极不良好的体验,从而损失用户。 在实际开发和学习中,我总结了一下关于安卓性能的优化,供大家参考交流。 应用程序的性能问题体现在很多方面, 比如第一次启动速度慢,或者进入某一界面速度慢;动画执行过程不流畅,或者动画执行卡顿时间长;ListView列表滑动过程中卡顿,不流畅;应用程序自定义的某特定界面...

king的专栏 3万+

Chromatix_AEC—深入解析曝光表配置与传感器参数计算

本文深入解析高通Chromatix AEC模块中的曝光表配置与传感器参数计算,详细介绍了自动曝光控制(AEC)的核心概念、首行曝光时间计算、行时间与曝光模式对比、帧率计算逻辑以及曝光表高级配置技巧。通过实战案例展示如何优化传感器参数联调,帮助开发者掌握Chromatix工具在摄像头系统中的关键应用。

266

Cadence Virtuoso Layout 版图绘制

画好原理图,打好pin脚(pin最好以全大写的形式书写,以防后续操作中可能出现Bug) 查看所使用工艺库的design rule文件,确定栅格单位设置大小 在准备绘制的原理图界面启动layout XL/GXL 在layout界面按e,设置网格大小与design rule匹配 直接根据原理图生成版图 根据原理图连接关系显示版图中未连接的飞线 查看和更改原理图与版图中器件对应的链接关系 shift + f:显示器件版图细节 版图的构成:元器件(工艺厂商提供)、器件连接、阱连接、IO和PAD模拟电路

bobo_supper的博客 2万+

Android RxJava数据库操作:响应式改造实践

在Android开发中,数据库操作是必不可少的部分。传统的数据库操作方式往往需要在后台线程中执行,然后通过Handler或回调函数将结果返回主线程。这种方式代码结构复杂,容易产生"回调地狱"。RxJava的响应式编程范式为我们提供了更优雅的解决方案。本文将分享如何使用RxJava对Android数据库操作进行响应式改造。代码简洁性:避免了回调地狱,代码更加清晰易读线程安全:自动处理线程切换,减少并发问题组合能力:可以轻松组合多个数据库操作错误处理:提供统一的错误处理机制响应式UI。

专注于移动开发的干货分享。提供高效解决方案、避坑指南与前沿技术解析。为开发者创造价值。 1519

基于Python的彭博社新闻高效爬取实战:最新技术与完整代码解析

本文将详细介绍如何使用Python最新技术构建一个高效的彭博社(Bloomberg)新闻爬虫系统。我们将从爬虫基础概念讲起,逐步深入到高级反反爬技术、异步抓取、数据解析与存储等核心环节。文章包含完整的代码实现,采用最新的aiohttp、Playwright等技术栈,并特别关注法律合规性和数据质量保障。通过本文,读者将掌握一个完整的商业新闻爬虫开发流程,并能够根据实际需求进行定制化开发。关键词:Python爬虫、彭博社、Bloomberg、新闻采集、aiohttp、Playwright、反反爬技术。

2201_76125261的博客 1503

安卓开发工程师-SQLite 数据库操作

在 SQLite 中,表结构通过 SQL 的语句定义。例如,假设我们有一个用户表User_id:主键,自增name:用户姓名age:用户年龄。

qq_62784677的博客 1186

手把手教你学Simulink--移动机器人多轮协同场景实例:基于Simulink的双轮差速PMSM轮毂电机协同驱动仿真

本文介绍了基于Simulink的双轮差速PMSM轮毂电机协同驱动仿真系统。针对移动机器人存在的电机参数不一致、负载分配不均等问题,提出主从同步+力矩补偿的协同控制策略。通过搭建包含运动学模型、PMSM电机模型和矢量控制器的仿真系统,实现了速度同步误差<0.005m/s、轨迹跟踪误差<0.8cm、能耗降低12.5%的优化效果。文章详细阐述了建模步骤、核心算法实现和性能验证,为移动机器人动力系统设计提供了实用参考方案。

MHD0815的博客 133

KubeVela入门到精通-K8S多集群交付

KubeVela是一个功能强大、易于使用、高度可扩展的应用交付与管理平台。它基于Kubernetes和OAM 技术构建,通过开放应用模型(OAM)来作为顶层的抽像,提供了声明式部署、多集群/混合环境支 持、插件与扩展性、中心化管控以及易于使用与可观测性等特点。

小杨同学的博客 1269

android数据库操作优化(二)

在android中查询sqlite数据库,我们一般都是写一个继承SQLiteOpenHelper的工具类,然后实例化SQLiteDatabase对象去进行各种增删改查的操作,对于查询出来的结果,我们一般都放在google封装好的Cursor(游标)中,然后从Cursor中取出我们查询语句的value结果,过程类似这样: public int getId(String name) {

祝福的博客 5505

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

深度揭秘:Android GreenDao 数据库操作模块使用原理大剖析(2)

GreenDao 是一个专门为 Android 平台设计的轻量级 ORM 框架,它通过将 Java 对象映射到数据库表,实现了数据库操作的自动化和简化。与传统的 SQLite 操作相比,GreenDao 具有更高的性能和更简洁的代码结构。它采用了代码生成的方式,根据开发者定义的实体类自动生成数据库操作所需的代码,大大减少了手动编写 SQL 语句的工作量。创建对象,用于管理数据库的打开和升级。通过获取可写的数据库实例。创建DaoMaster对象,用于管理数据库的创建和版本控制。通过。

Android开发领域创作者 2069

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

安卓开发框架

(4) 图片缓存模块:通过FinalBitmap,imageview加载bitmap的时候无需考虑bitmap加载过程中出现的oom和android容器快速滑动时候出现的图片错位等现象。支持GET,POST,PUT,MOVE,COPY,DELETE,HEAD,OPTIONS,TRACE,CONNECT请求;(2) ioc模块:android中的ioc模块,完全注解方式就可以进行UI绑定、res中的资源的读取、以及对象的初始化。支持链式表达查询,更直观的查询语义,参考下面的介绍或sample中的例子。

m0_72431373的博客 1023

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

2024最新Android性能优化面试题

卡顿是指应用在运行时出现的不流畅现象。可以通过使用TraceviewSystrace等工具来检测卡顿的原因。解决方法包括优化代码逻辑、减少内存分配、使用异步操作等。垃圾回收是自动回收不再使用的对象占用的内存的过程。优化垃圾回收可以通过减少临时对象的创建、合理使用集合类、避免在主线程中进行大量回收操作等。

yihanss的博客 2564
上一篇: Android xliff和字符串资源(Error parsing XML: unbound prefix)
下一篇: android数据库操作优化(二)
祝福
博客等级 码龄15年 263粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值