AsyncTask 会降低应用性能



我在测试应用程序中使用 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 类中有几个方法需要执行事务。

  1. 要启动事务,我们需要beginTransaction()方法。
  2. 要结束事务,我们需要 endTransaction() 方法。
  3. 如果要提交事务,请使用 setTransactionSuccess() 方法。此方法会将更改提交到 SQLiteDatabase。

您还可以使用 SQLite 事务删除 SQLiteDatabase 中的多个记录。

有关上述内容的详细信息,请参阅以下链接:

http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#beginTransaction%28%29

最新更新