AsyncTask降低了应用程序性能

时间:2016-03-18 10:31:17

标签: android android-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可以降低应用程序的速度吗?

1 个答案:

答案 0 :(得分:-1)

首先,您一次尝试保存1700条记录。这将需要几秒钟(大约超过5秒)。异步任务旨在执行最多持续4秒的任务。您可以做的是,您可以将记录分成2或3个部分,并使用一个AsyncTask插入一个部分。例如,如果您有1700条记录,则使用一个AsyncTask插入大约600条记录,当AsyncTask完成时,再启动另一条记录以插入下一条600条记录。您可以从AsyncTask类中前一个onPostUpdate()方法启动另一个AsyncTask。

其次,为了保存这么多记录并保持系统性能,你应该使用一个事务。 SQLiteDatabase类中有几个方法可用于执行事务。

  1. 要开始交易,我们需要beginTransaction()方法。
  2. 要结束交易,我们需要endTransaction()方法。
  3. 如果要提交事务,请使用setTransactionSuccessful()方法。此方法将提交对SQLiteDatabase的更改。
  4. 您还可以使用SQLite事务删除SQLiteDatabase中的多个记录。

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

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