android多线程数据库操作
❶ android操作sqlite数据库需要new一个新thread吗
不需要,如果sqlite查询很耗时的话可以使用thread异步查询。
SQLite是轻量级嵌入式数据库引擎,它支持 SQL 语言,并且只利用很少的内存就有很好的性能。此外它还是开源的,任何人都可以使用它。许多开源项目((Mozilla, PHP, Python)都使用了 SQLiteSQLite 由以下几个组件组成:SQL 编译器、内核、后端以及附件。SQLite 通过利用虚拟机和虚拟数据库引擎(VDBE),使调试、修改和扩展 SQLite 的内核变得更加方便。
Android 集成了 SQLite 数据库 Android 在运行时(run-time)集成了 SQLite,所以每个 Android 应用程序都可以使用 SQLite 数据库。
数据库存储在 data/< 项目文件夹 >/databases/ 下。 Android 开发中使用 SQLite 数据库 Activites 可以通过 Content Provider 或者 Service 访问一个数据库。
Android 提供了 SQLiteOpenHelper 创建一个数据库,只要继承 SQLiteOpenHelper 类,就可以轻松的创建数据库。SQLiteOpenHelper 类根据开发应用程序的需要,封装了创建和更新数据库使用的逻辑。
SQLiteOpenHelper 的子类,至少需要实现三个方法:
1 构造函数,调用父类 SQLiteOpenHelper 的构造函数。这个方法需要四个参数:上下文环境(例如,一个 Activity),数据库名字,一个可选的游标工厂(通常是 Null),一个代表你正在使用的数据库模型版本的整数。
2 onCreate()方法,它需要一个 SQLiteDatabase 对象作为参数,根据需要对这个对象填充表和初始化数据。
3 onUpgrage() 方法,它需要三个参数,一个 SQLiteDatabase 对象,一个旧的版本号和一个新的版本号,这样就可以清楚如何把一个数据库从旧的模型转变到新的模型。
❷ android sqlitedatabase 的操作是同步线程安全的吗
是的,默认的情况下,你可以把insert,update这些函数看作原子操作。可以参考这一篇
网页链接
但是你需要注意,你不能多次调用close函数,否则会产生异常。
❸ android在手机本地数据库读取数据属于耗时操作吗,用启动新线程吗
数据库操作建议不要写在UI里线程里,尤其是当数据量比较大时,这样比较容易引起ANR。所以建议启动新的线程里来处理数据库操作。
❹ android 数据库操作可以放在子线程里面吗
mysql是免费数据库,市场普及率非常高,而新建数据库就得一切从0来,收费还是不收费?编个新数据库技术并不难,难在数据库标准化机构是美国的,美国大嘴一张,整个数据库就得重改这里面的维护预算谁给出?
❺ android 怎样返回子线程里面获到的数据库的值
直接定义个public static的全局变量,就可以了;可以保存在自定义的类、继承自Application的类、
SharePreference等中的一个属性;另一个activity从这里面取数据,不用直接传递。
❻ 简述android多线程机制
Handler对象与其调用者在同一线程中,如果在Handler中设置了延时操作,则调用线程也会堵塞。每个Handler对象都会绑定一个Looper对象,每个Looper对象对应一个消息队列(MessageQueue)。如果在创建Handler时不指定与其绑定的Looper对象,系统默认会将当前线程的Looper绑定到该Handler上。在主线程中,可以直接使用newHandler()创建Handler对象,其将自动与主线程的Looper对象绑定;在非主线程中直接这样创建Handler则会报错,因为Android系统默认情况下非主线程中没有开启Looper,而Handler对象必须绑定Looper对象。这种情况下,需先在该线程中手动开启Looper(Looper.prepare()-->Looper.loop()),然后将其绑定到Handler对象上;或者通过Looper.getMainLooper(),获得主线程的Looper,将其绑定到此Handler对象上。Handler发送的消息都会加入到Looper的MessageQueue中。一说Handler包含两个队列:线程队列和消息队列;使用Handler.post()可以将线程对象加入到线程队列中;使用Handler.sendMessage()可以将消息对象加入到消息队列中。通过源码分析证实,Handler只有一个消息队列,即MessageQueue。通过post()传进去的线程对象将会被封装成消息对象后传入MessageQueue。使用post()将线程对象放到消息队列中后,当Looper轮询到该线程执行时,实际上并不会单独开启一个新线程,而仍然在当前Looper绑定的线程中执行,Handler只是调用了该线程对象的run()而已。如,在子线程中定义了更新UI的指令,若直接开启将该线程执行,则会报错;而通过post()将其加入到主线程的Looper中并执行,就可以实现UI的更新。使用sendMessage()将消息对象加入到消息队列后,当Looper轮询到该消息时,就会调用Handler的handleMessage()来对其进行处理。再以更新UI为例,使用这种方法的话,就先将主线程的Looper绑定在Handler对象上,重载handleMessage()来处理UI更新,然后向其发送消息就可以了。
❼ Android 查询数据库采用ORM数据框架,是否还需要开启线程异步处理
直接引入的api就是异步的吧,不需要单独处理了。
❽ Android SQLite 多线程写数据库有什么好的解决方案吗
采用批量原理定间内接收串口数据定器接收间段数据批量存入数据库处理接收存入数据库线程面减少频繁访问数据库提高效率另面减少系统销