我在测试应用程序中使用 AsyncTask 将大量记录保存在数据库中:
public class Test extends AsyncTask<Void, Integer, Void> {
private Context mContext;
public Test(Context context) {
mContext = context;
}
@Override
protected void onPreExecute() {
}
@Override
protected void onProgressUpdate(Integer... progress) {
}
@Override
protected Void doInBackground(Void... params) {
JobsDAO jobsDAO = new JobsDAO(mContext);
for(int i=0; i<1700; i++) {
jobsDAO.saveJob("aaaa", "54854874", "sdsdds", 3, "ssdfdsf", "fdfdsf", "dfsfds", "sdfdsf");
}
return null;
}
@Override
protected void onPostExecute(Void result) {
}
}
但是当我执行它时,它会减慢我的应用程序。正常吗?AsyncTask 会减慢应用程序的速度吗?
首先,您尝试一次性保存 1700 条记录。这将需要几秒钟(大约超过 5 秒)。异步任务旨在执行最长持续 4 秒的任务。您可以做的是,您可以将记录分成 2 或 3 个部分,并使用一个 AsyncTask 插入一个部分。例如,如果您有 1700 条记录,则使用单个 AsyncTask 插入大约 600 条记录,当该 AsyncTask 完成时,启动另一条记录以插入接下来的 600 条记录。您可以从 AsyncTask 类中前一个的 onPostUpdate() 方法启动另一个 AsyncTask。
其次,为了保存这么多记录并保持系统性能,您应该使用事务。SQLiteDatabase 类中有几个方法需要执行事务。
- 要启动事务,我们需要beginTransaction()方法。
- 要结束事务,我们需要 endTransaction() 方法。
- 如果要提交事务,请使用 setTransactionSuccess() 方法。此方法会将更改提交到 SQLiteDatabase。
您还可以使用 SQLite 事务删除 SQLiteDatabase 中的多个记录。
有关上述内容的详细信息,请参阅以下链接:
http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#beginTransaction%28%29