CursorAdapter работает медленно на Android 4 - PullRequest
3 голосов
/ 02 апреля 2012

У меня есть расширенный класс CursorAdapter, который дополняет список предложений данными из моей базы данных sqlite.До сих пор с Android 2.3 раньше работал нормально, но сейчас в Android 4.0.1 чувствует себя очень медленно.Другое дело, во-вторых, что список предложений также очень медленно прокручивается.Есть ли известная проблема с CursorAdapter в Ice Cream Sandwich?Протестировано на устройстве 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–30 секунд), но список из автозаполнения Textview не появляется.

Задержка находится между onCreateLoader (возвращает CursorLoader асинхронно) и onLoadFinished ().

1 Ответ

1 голос
/ 02 апреля 2012

SimpleCursorAdapter устарело по тем же причинам. Google рекомендует использовать CursorLoader вместо SimpleCursorAdapter для лучшей скорости. ArrayAdapter тоже хорошая идея.

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

...