【问题标题】:How to prevent Android SQLite from dumping stack trace to logcat?如何防止 Android SQLite 将堆栈跟踪转储到 logcat?
【发布时间】:2011-11-30 10:39:22
【问题描述】:

在 Android 2.3.3 上,我正在使用 API 方法批量导入我的一个 SQLite 表:

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

它工作正常,但如果任何行出现数据库错误(例如约束错误),则会将完整的堆栈跟踪写入 Android Logcat,该跟踪会很快填满。

如何关闭此堆栈跟踪?

我已经处理了任何抛出的异常,但是 Logcat 被 SQLite 库代码中的污染。

我担心移动设备的性能。

  • 已启用导入事务
  • 无法预加载数据库,因为数据可能会发生变化

应该强制执行约束,我将处理违规行为,但我想关闭 Logcat 中每次违规乘以数百次违规的 20 行堆栈跟踪。

很遗憾,我也无法使用 Android Froyo 引入的高级冲突处理,因为应用也必须在旧设备上运行。

干杯。

【问题讨论】:

  • 最好自己修复错误
  • 同时我找到了解决方案,请参阅下面的答案。

标签: android sqlite stack-trace logcat


【解决方案1】:

好的,我刚刚找到解决方法如下:

我必须使用不同的 API 方法(不是 SQLiteDatabase.insert()):

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

现在,异常从 SQLite 库中抛出,正如预期的那样,没有堆栈跟踪被转储。

【讨论】:

    【解决方案2】:

    只需根据标签或进程 ID 过滤掉您不感兴趣的任何内容。您可以在 Eclipse 的 Logcat 查看器中轻松完成此操作,或者如果您在命令行上使用 Logcat the instructions are here

    【讨论】:

    • 谢谢,但正如我上面所说,我担心实际移动设备上的性能,而不是 Eclipse。
    【解决方案3】:

    这不是污染。 LogCat 的目的是注册设备/模拟器上发生的一切。

    如果你想过滤掉你的 LogCat,在 Eclipse 中是可能的(你可以按日志标签、pid 或日志级别过滤),从而提供了一种从 LogCat 窗口中“删除”不需要的异常的方法。

    编辑如果问题是性能(根据您的 cmets),我认为您不必担心。

    • 如果您发现性能不佳,您可以通过在批量插入上启用事务来获得更多收益。
    • 另外,如果要为您的应用程序插入“起始数据”,您是否考虑过使用预加载的数据库发送 apk?您可以复制自己准备的现有数据库,而不是在运行时插入所有内容。不再有约束问题,您的用户几乎可以立即启动。当然,如果是动态批量插入(基于用户输入或运行时定义的外部参数),是不可能的。

    【讨论】:

    • 但我担心实际手机的性能。将完整的堆栈跟踪转储到 Logcat 肯定会花费时间和资源。我说的是批量导入,数百行可能会违反我想忽略的约束。它现在的行为方式,在这种情况下,数百个堆栈跟踪被写入 Logcat,每个堆栈跟踪由 20 行左右组成。
    • 只是一个想法:如果你想忽略约束,你为什么首先要有它?当然,如果它在那里,它就应该被强制执行,不是吗?但无论如何,我认为你不应该担心对实际设备的性能影响,除非你打算在 1995 年的手机上运行它;)
    • - 事务已启用- 无法预加载数据库,因为数据可能会更改 应强制执行约束,我将处理违规,但我想关闭 Logcat 中针对每次违规的 20 行堆栈跟踪。
    • 好吧,可以说,如果您的数据库中有约束,那么违反该约束应该使您的应用程序崩溃
    • 我不同意,我只是记录无效的行 ID 以供以后评估。所有其他行都是有效数据。为什么它应该让应用程序崩溃,那将是一个糟糕的用户体验。实际上,如果违反约束只会将一行记录到 Logcat,我不会太介意,但是完整的堆栈跟踪太多了,或者至少应该是可配置的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-15
    • 2013-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多