CursorAdapter在android 4上运行缓慢

时间:2012-04-02 07:29:45

标签: android android-4.0-ice-cream-sandwich android-cursoradapter

我有一个扩展的CursorAdapter类,它使用我的sqlite数据库中的数据完成建议列表。到目前为止用android 2.3工作得很好,但现在在android 4.0.1中感觉很慢。另外,其次是建议列表滚动速度也很慢。冰淇淋三明治中的CursorAdapter有任何已知问题吗?在Nexus S设备上测试。

编辑:

我改变了我的方法并尝试使用CursorLoader,但仍需要很长时间才能运行查询并填充我的自动完成列表。

的onCreate:

mSuggestionAdapter = new SimpleCursorAdapter(this,
            android.R.layout.simple_list_item_2, null,
            new String[] { "name_en", "pcode" },
            new int[] { android.R.id.text1, android.R.id.text2 }, 0);
    search_text.setAdapter(mSuggestionAdapter);

getLoaderManager().initLoader(0, null, this);

onTextChanged:

@Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {

            getLoaderManager().restartLoader(0, null, MapActivity.this);
        }

CursorLoader接口:

@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {

    Uri baseUri = SearchableProvider.CONTENT_URI;

    String select = DataBaseHelper.getWhereStatement(search_text.getText().toString());
    return new CursorLoader(this, baseUri,
            DataBaseHelper.SEARCHABLE_SUMMARY_PROJECTION, select, null,
            "name_en" );

    //return null;
}

@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
    // TODO Auto-generated method stub
    mSuggestionAdapter.swapCursor(data);

}

@Override
public void onLoaderReset(Loader<Cursor> arg0) {
    // TODO Auto-generated method stub
    mSuggestionAdapter.swapCursor(null);
}

也尝试使用ArrayAdapter。我在一段时间后(20-men30秒)获取数据,但是自动完成Textview中的列表没有出现。

延迟介于onCreateLoader(异步返回CursorLoader)和onLoadFinished()之间。

1 个答案:

答案 0 :(得分:1)

由于同样的原因,

SimpleCursorAdapter已被弃用。 Google建议使用CursorLoader代替SimpleCursorAdapter以提高速度。 ArrayAdapter也是一个好主意。

http://developer.android.com/reference/android/content/CursorLoader.html