Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/196.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否最好使用AsyncTask在数据库上写入数据?_Java_Android_Android Asynctask - Fatal编程技术网

Java 是否最好使用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())

我的问题是:我有一个应用程序需要在SQLite数据库上每秒进行一次写操作,最好使用AsyncTask在该数据库上写数据,还是不写

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();
}