1、初始化一个的子线程
private void startDatabaseThread() {
mDataHandlerThread = new HandlerThread("DatabaseThread");
mDataHandlerThread.start();
mDataHandler = new Handler(mDataHandlerThread.getLooper());
}
2、子线程中运行的逻辑
public void insertData(String data) {
mDataHandler.post(() -> {
// 执行数据库插入操作
// database.insert(...)
...
});
}
public void queryData(String query, QueryCallback callback) {
mDataHandler.post(() -> {
Cursor cursor = null;
try {
// 执行查询操作
cursor = database.rawQuery(query, null);
// 将结果回调到主线程
mainHandler.post(() -> {
if (cursor != null && cursor.moveToFirst()) {
// 处理查询结果
callback.onSuccess(cursor);
} else {
callback.onFailure();
}
});
} catch (Exception e) {
mainHandler.post(callback::onFailure);
} finally {
if (cursor != null) {
cursor.close();
}
}
});
}
// 定义查询结果的回调接口
public interface QueryCallback {
void onSuccess(Cursor cursor);
void onFailure();
}
public void quit() {
// 当不再需要HandlerThread时,可以退出
handlerThread.quit();
}
3、调用此方法
queryData(xxx, new QueryCallback() {
@Override
public void onSuccess(Cursor cursor) {
}
@Override
public void onFailure() {
}
});