Android SQLiteDatabase SELECT查询需要很长时间

时间:2015-08-01 04:08:32

标签: android sqlite select

我在TABLE_CONTACT中有大约1500条记录。我获取联系人的代码:

Moq

问题是:我第一次运行此方法时,需要public ArrayList<SBContact> getAllContacts() { SQLiteDatabase database = dbHelper.getWritableDatabase(); ArrayList<SBContact> mContacts = new ArrayList<SBContact>(); String selectQuery = "SELECT * FROM " + SBDatabaseHelper.TABLE_CONTACT; Cursor cursor = database.rawQuery(selectQuery, null); if (cursor.moveToFirst()) { do { SBContact result = new SBContact(cursor.getString(cursor.getColumnIndex(SBDatabaseHelper.CONTACT_NUMBER)), cursor.getString(cursor.getColumnIndex(SBDatabaseHelper.CONTACT_NAME)), cursor.getInt(cursor.getColumnIndex(SBDatabaseHelper.EXITS_USER))); mContacts.add(result); } while (cursor.moveToNext()); } return mContacts; } 。 5秒后我再次运行此方法,大约需要15ms

以类似的方式,在第一次通话后,15s之后,再次运行方法,大概需要20 seconds。 2分钟后,再次运行此方法,第一次运行时需要10 seconds

此时,没有其他线程对数据库进行读/写查询。

我不明白15ms的作用。是否需要时间释放内存或做某事?

EDITED 对不起,这不是SQLiteDatabase的问题。有关此案例的详细信息,请参阅我的答案。

2 个答案:

答案 0 :(得分:2)

每次查询后关闭光标

答案 1 :(得分:1)

对不起,我的错误。

此问题与SQLiteDatabase无关。这是由于AsyncTask问题。

我的情况是:我运行一个AsyncTask来从本地数据库(sqlite)获取联系,同时,我开始在这个AsyncTask中使用服务器(调用api需要很长时间)的新线程。当我运行AsyncTask再次获取联系人时(使用execute方法),旧的AsyncTask仍然在运行,并且它阻止了新的运行。这就是新任务需要很长时间才能完成的原因。 我已经使用executeOnExecutor方法修复了,方法的结果立即返回。

再一次,对不起所有人。