Java 是否最好使用AsyncTask在数据库上写入数据?
我的问题是:我有一个应用程序需要在SQLite数据库上每秒进行一次写操作,最好使用AsyncTask在该数据库上写数据,还是不写Java 是否最好使用AsyncTask在数据库上写入数据?,java,android,android-asynctask,Java,Android,Android Asynctask,我的问题是:我有一个应用程序需要在SQLite数据库上每秒进行一次写操作,最好使用AsyncTask在该数据库上写数据,还是不写 public void insertData(Data data) { SQLiteDatabase db = this.getWritableDatabase(); ContentValues RecordValues = new ContentValues(); RecordValues.put("uid", data.getUid())
public void insertData(Data data) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues RecordValues = new ContentValues();
RecordValues.put("uid", data.getUid());
RecordValues.put("id_usr", data.getUserId());
RecordValues.put("id_route", data.getIdRoute());
RecordValues.put("lat", data.getLatitude());
RecordValues.put("lng", data.getLongitude());
RecordValues.put("timestamp", data.getTime());
RecordValues.put("privacy", data.getTime());
db.insert("DBNAME", null, RecordValues);
db.close();
}
数据库是通过使用SqLiteClass
实现的
这个应用程序需要完成一些繁重的任务,比如处理实时数据、web套接字、google地图等等,所以我想在这一点上进行优化
我不知道每秒启动一次异步任务是否更好,我可能会犯错误,所以我们可以讨论一下
提前感谢。是的,建议在后台线程中执行数据库操作。您可以考虑使用<代码> AycCastase<代码>或<代码>汉德勒<代码>来处理后台线程中的DB操作,而不是将其放在主UI线程中。p> 您可能还希望在更改或向数据库表中插入项时获得数据库的更新。您可以考虑使用内容观察器来通知数据库表中的内容更改。请检查
LoaderCallbacks
功能
我在中创建了一个项目,用
LoaderCallbacks
演示数据库操作。但是,我已将所有数据库操作放在UI线程中。最好使用AsyncTask
或Handler
在另一个线程中处理它们 不要在主线程中插入数据。如果数据很大,则可能会挂起主线程。
最好使用AsyncTask、Handler、第三方库RxJava在后台线程中插入。
并且必须使用beginTransaction()
如果我是你的话,我会用一个专用的手柄线。谷歌的安卓性能视频系列推荐使用它,当你有大量的操作要执行时,它们可以被分成几个部分。你可以这样做:
//make sure you have one instance of this HandlerThread
private HandlerThread updateThread = acquireThisThread();
private Handler updateHandler;
private void someInitializingFunction() {
updateThread.start()
updateHandler = new Handler(updateThread.getLooper())
}
private void onEachSecondCallback() {
updateHandler.post(new Runnable() {
@Override
public void run() {
//your insertingDataFunction
insertData(getDataSomehow());
}
});
}
private void someDeinitializingFunction() {
updateThread.quit();
}
这里有一个到表演视频的链接。它使用了完全不同的例子,但若你们以此为基础,你们就会明白为什么HandlerThread在这里很酷。
您应该在单独的线程上执行IO是的。从SQLite存储或检索大量数据,您可以使用AsynchTask以获得更好的性能。非常好,因此我将在单独的线程中对DB执行所有操作。谢谢大家,非常有帮助我不需要声誉15,需要对我的问题进行投票才能获得分数!哈哈:好吧,你现在有了。:)很好的解释
//make sure you have one instance of this HandlerThread
private HandlerThread updateThread = acquireThisThread();
private Handler updateHandler;
private void someInitializingFunction() {
updateThread.start()
updateHandler = new Handler(updateThread.getLooper())
}
private void onEachSecondCallback() {
updateHandler.post(new Runnable() {
@Override
public void run() {
//your insertingDataFunction
insertData(getDataSomehow());
}
});
}
private void someDeinitializingFunction() {
updateThread.quit();
}