当前位置:首页 » 安卓系统 » 安卓数据库操作放哪个线程

安卓数据库操作放哪个线程

发布时间: 2022-02-24 11:18:23

1. android在手机本地数据库读取数据属于耗时操作吗,用启动新线程吗

数据库操作建议不要写在UI里线程里,尤其是当数据量比较大时,这样比较容易引起ANR。所以建议启动新的线程里来处理数据库操作。

2. android操作sqlite数据库需要new一个新thread吗

不需要,如果sqlite查询很耗时的话可以使用thread异步查询。

SQLite是轻量级嵌入式数据库引擎,它支持 SQL 语言,并且只利用很少的内存就有很好的性能。此外它还是开源的,任何人都可以使用它。许多开源项目((Mozilla, PHP, Python)都使用了 SQLiteSQLite 由以下几个组件组成:SQL 编译器、内核、后端以及附件。SQLite 通过利用虚拟机和虚拟数据库引擎(VDBE),使调试、修改和扩展 SQLite 的内核变得更加方便。

  1. Android 集成了 SQLite 数据库 Android 在运行时(run-time)集成了 SQLite,所以每个 Android 应用程序都可以使用 SQLite 数据库。

  2. 数据库存储在 data/< 项目文件夹 >/databases/ 下。 Android 开发中使用 SQLite 数据库 Activites 可以通过 Content Provider 或者 Service 访问一个数据库。

  3. Android 提供了 SQLiteOpenHelper 创建一个数据库,只要继承 SQLiteOpenHelper 类,就可以轻松的创建数据库。SQLiteOpenHelper 类根据开发应用程序的需要,封装了创建和更新数据库使用的逻辑。

  4. SQLiteOpenHelper 的子类,至少需要实现三个方法:

    1 构造函数,调用父类 SQLiteOpenHelper 的构造函数。这个方法需要四个参数:上下文环境(例如,一个 Activity),数据库名字,一个可选的游标工厂(通常是 Null),一个代表你正在使用的数据库模型版本的整数。

    2 onCreate()方法,它需要一个 SQLiteDatabase 对象作为参数,根据需要对这个对象填充表和初始化数据。

    3 onUpgrage() 方法,它需要三个参数,一个 SQLiteDatabase 对象,一个旧的版本号和一个新的版本号,这样就可以清楚如何把一个数据库从旧的模型转变到新的模型。

3. GreenDAO的数据库操作需要在子线程完成吗

当然是可以的,在线程里面会有很多程序,可以调用任何程序啊,这样调用的程序都在一个线程里完成的。在这个过程中当然也可以调用database类来完成对数据库的操作。

4. android 哪些操作需要在ui 线程中

anroid系统中UI线程负责向UI组件分发事件(包括绘制事件),并处理用户和应用之间交互。
做一些比较耗时的工作比如访问网络或者数据库查询,都会阻塞UI线程,导致事件停止分发(包括绘制事件)。对于用户来说,应用看起来像是卡住了,更坏的情况是,如果UI线程blocked的时间太长(大约超过5秒),用户就会看到ANR(application not responding)的对话框。
因此在ui线程做耗时非常短,不会发生阻塞的操作

5. 安卓 用多线程对同一数据库(SQL)进行读写操作 用什么方法

方法加同步锁,保证在同一个时间内只有一个人可以使用可以解决,具体可以参照http://www.blogjava.net/tscfengkui/archive/2010/11/10/337709.html?opt=admin 这个例子

6. android 数据库操作可以放在子线程里面吗

mysql是免费数据库,市场普及率非常高,而新建数据库就得一切从0来,收费还是不收费?编个新数据库技术并不难,难在数据库标准化机构是美国的,美国大嘴一张,整个数据库就得重改这里面的维护预算谁给出?

7. android sqlitedatabase 的操作是同步线程安全的吗

是的,默认的情况下,你可以把insert,update这些函数看作原子操作。可以参考这一篇

网页链接

但是你需要注意,你不能多次调用close函数,否则会产生异常。

8. android sqlite是在哪个线程商

其实在只使用一个SQLiteDatabase的引用时,SQLiteDatabase对CRUD操作都会加上一个锁(因为是db文件,所以精确至数据库级),这就保证了在同一时间你只能进行一项操作,无论是不是在同一个线程中,这就导致了如果你在程序中对SQLiteOpenHelper使用了单例模式,那么你对数据库读写进行任何的优化操作都是"徒劳"。

多线程读数据库
仔细看源码你会发现,在数据库操作中只有add,delete,update会调用lock(),而query()是不会调用的,但是在加载数据时,调用了SQLiteQuery的fillWindow方法,而该方法依然会调用SQLiteDatabase.lock(),所以要想真正的实现多线程读数据库,只能每个线程使用各自的SQLiteOpenHelper对象进行读操作,这样就可避开同步锁。关键源码如下:

热点内容
淘宝卖的地下城脚本 发布:2025-02-08 19:41:40 浏览:61
安卓怎么把提升画质关了 发布:2025-02-08 19:40:11 浏览:359
我想你加密 发布:2025-02-08 19:39:24 浏览:211
java手机号正则表达式 发布:2025-02-08 19:34:50 浏览:350
ue加密 发布:2025-02-08 19:34:05 浏览:473
滁州压缩机 发布:2025-02-08 19:34:03 浏览:879
压缩棉花絮片 发布:2025-02-08 19:33:12 浏览:394
存储异丙醇 发布:2025-02-08 19:33:09 浏览:149
怎么运行android源码 发布:2025-02-08 19:28:38 浏览:412
和平精英安卓怎么注册苹果账号 发布:2025-02-08 19:25:17 浏览:651