Как запретить Android SQLite сбрасывать трассировку стека в logcat? - PullRequest
2 голосов
/ 30 ноября 2011

В Android 2.3.3 я выполняю массовый импорт в одну из моих таблиц SQLite, используя метод API:

SQLiteDatabase.insert (Строковая таблица, String nullColumnHack, значения ContentValues)

Работает нормально, но если в какой-либо строке есть ошибка базы данных (например, ошибка ограничения), полная трассировка стека записывается в Android Logcat, которая быстро заполняется.

Как отключить эту трассировку стека?

Я уже обрабатываю все возникающие исключения, но Logcat загрязняется из кода библиотеки SQLite.

Меня беспокоит производительность на мобильных устройствах.

  • транзакции для импорта уже включены
  • предварительно загруженная БД невозможна, поскольку данные могут измениться

Необходимо применить ограничения, и я буду обрабатывать нарушение, но я хочу отключить 20 трассировок стека строк в Logcat для каждого нарушения, умноженного на сотни нарушений.

К сожалению, я также не могу использовать расширенную обработку конфликтов, представленную в Android Froyo, поскольку приложение также должно работать на старых устройствах.

Приветствие.

Ответы [ 3 ]

6 голосов
/ 01 декабря 2011

ОК, я только что нашел решение следующим образом:

Я должен использовать другой метод API (не SQLiteDatabase.insert()):

SQLiteDatabase.insertOrThrow(String table, String nullColumnHack, ContentValues values)

Теперь исключение выдается из библиотеки SQLite, как и ожидалось, и трассировка стека не создается.

0 голосов
/ 30 ноября 2011

Это не загрязнение.Цель LogCat - зарегистрировать все, что происходит на устройстве / эмуляторе.

Если вы хотите отфильтровать LogCat, это возможно в Eclipse (вы можете фильтровать по тегу журнала, по pid или по журналууровень), предоставляя таким образом способ «удалять» нежелательные исключения из окна LogCat.

EDIT Если проблема связана с производительностью (согласно вашим комментариям), я не думаю, что вам следует это делатьбеспокойство.

  • Если вы обнаружите плохую производительность, вы получите НАМНОГО больше, включив транзакции на вашей пакетной вставке.
  • Кроме того, если вы хотите вставить «стартовые данные» для вашего приложения, вы рассматривали возможность доставки apk с предварительно загруженной базой данных?Вместо того, чтобы вставлять все во время выполнения, вы можете просто скопировать существующую базу данных, которую вы подготовили самостоятельно.Больше никаких проблем, и почти мгновенный старт для ваших пользователей.Конечно, если это динамическая пакетная вставка (на основе пользовательского ввода или внешних параметров, определенных во время выполнения), это невозможно.
0 голосов
/ 30 ноября 2011

Просто отфильтруйте все, что вас не интересует, по тегу или идентификатору процесса.Вы можете легко сделать это в средстве просмотра Logcat в Eclipse или, если вы используете Logcat в командной строке , инструкции здесь .

...