我在我的测试应用程序中使用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可以降低应用程序的速度吗?
答案 0 :(得分:-1)
首先,您一次尝试保存1700条记录。这将需要几秒钟(大约超过5秒)。异步任务旨在执行最多持续4秒的任务。您可以做的是,您可以将记录分成2或3个部分,并使用一个AsyncTask插入一个部分。例如,如果您有1700条记录,则使用一个AsyncTask插入大约600条记录,当AsyncTask完成时,再启动另一条记录以插入下一条600条记录。您可以从AsyncTask类中前一个onPostUpdate()方法启动另一个AsyncTask。
其次,为了保存这么多记录并保持系统性能,你应该使用一个事务。 SQLiteDatabase类中有几个方法可用于执行事务。
您还可以使用SQLite事务删除SQLiteDatabase中的多个记录。
有关上述内容的更多信息,请参阅以下链接: