Android自定义数据库异步操作

在Android应用开发中,直接在主线程进行数据库操作可能导致应用卡顿。通过研究Google的AsyncQueryHandler,作者实现了一个自定义的本地数据库异步操作类,确保数据库操作不影响主线程的流畅性。文章介绍了实现原理及使用方法,并提供了GitHub链接供读者参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

平时我们在开发Android应用的时候,数据库操作是无法避免的,之前开发过程中,一直没太去在意在主线程中操作数据库,毕竟一般的数据库操作都在毫秒级的,但是考虑到极限的情况下,万一数据库要插入上万条数据呢,这样就会卡死主线程,导致应用使用不流畅,用户体验很差。
为了解决这个问题,我找了很多开源的数据库开源框架,比如OrmLite什么的,虽然这些框架都很好用,也很高大上,用了什么映射等等,Api也很简单,但是我觉得作为程序猿,一直使用别人写好的框架,语言也不是原生的数据库操作语言,那如果你用习惯之后,回头想想,你还会随便写出数据库的操作函数吗?
项目上正好有时间优化,我就去研究了一下异步数据库,我发现Google有一个AsyncQueryHandler这个类,主要用来查询系统级的数据,因为它需要确定的Uri,通过它,我写了一个关于本地数据库异步操作的类,可以给大家分享下。

import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Looper;
import android.os.Message;

import com.example.jianglei.asyncsqlite.Logger;

import java.util.List;


/**
 * 数据库异步框架
 * Created by jianglei on 2016/4/6.
 */
public class AsyncHandler extends Handler {
   
   

    private static final String TAG = "MasAsyncQueryHandler";

    public static final long SUCCESS = 1;
    public static final long FAIL = -1;

    private static final int EVENT_ARG_SINGLE_INSERT = 0;
    private static final int EVENT_ARG_MULTI_INSERT = 1;
    private static final int EVENT_ARG_QUERY = 2;
    private static final int EVENT_ARG_UPDATE = 3;
    private static final int EVENT_ARG_DELETE = 4;
    private static final int EVENT_INIT_DATABASE = 5;

    private static Looper sLooper = null;

    private Handler mWorkerThreadHandler;

    private IAsyncHandlerCallback mIAsyncHandlerCallback;

    protected static class SqliteArgs {
   
   
        public SQLiteDatabase db;
        public String table;
        public Handler handler;
        public IAsyncHandlerCallback callback;
    }

    protected static final class InsertSingleArgs extends SqliteArgs {
   
   
        public String nullColumnHack;
        public ContentValues values;
        public long result;
    }

    protected static final class InsertMultiArgs extends SqliteArgs {
   
   
        public String nullColumnHack;
        public List<ContentValues> valuesList;
        public long result;
    }

    protected static final class QueryArgs extends SqliteArgs {
   
   
        public boolean distinct;
        public String[] columns;
        public String whereClause;
        public String[] whereArgs;
        public String groupBy;
        public String having;
        public String orderBy;
        public String limit;
        public Cursor result;
    }

    protected static final 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值