Android SQLiteがスタックトレースをログキャットにダンプするのを防ぐ方法は?
-
26-10-2019 - |
質問
Android 2.3.3では、APIメソッドを使用して、SQLiteテーブルの1つにバルクインポートを行っています。
sqlitedatabase.insert(string table、string nullcolumnhack、contentvalues値)
正常に動作しますが、任意の行(制約エラーなど)にデータベースエラーがある場合、フルスタックトレースはAndroid LogCatに書き込まれ、すぐにいっぱいになります。
このスタックトレースをオフにするにはどうすればよいですか?
私はすでにスローされている例外を処理しますが、LogCatはSQLiteライブラリコード内から汚染されています。
モバイルデバイスでのパフォーマンスが心配です。
- インポートのトランザクションはすでに有効になっています
- データが変更される可能性があるため、プリロードされたDBは不可能です
制約を実施する必要があり、違反を処理しますが、違反ごとに20行のスタックトレースに数百の違反を掛けたことが、私がオフにしたいものです。
残念ながら、Android Froyoで導入された高度な競合ハンドリングも使用することはできません。アプリも古いデバイスで実行する必要があるためです。
乾杯。
解決
わかりました、私は次のように解決策を見つけました:
別のAPIメソッドを使用する必要があります(そうではありません SQLiteDatabase.insert()
):
SQLiteDatabase.insertOrThrow(String table, String nullColumnHack, ContentValues values)
これで、例外はSQLiteライブラリからスローされ、予想どおり、スタックトレースは捨てられません。
他のヒント
タグまたはプロセスIDに基づいて、興味のないものを除外するだけです。 EclipseのLogCat Viewerで簡単に行うことができます。 指示はこちらです.
汚染ではありません。デバイス /エミュレータで行われているすべてのものを登録することは、LogCatの目的です。
ログキャットをフィルタリングしたい場合は、Eclipse(ログタグ、PID、またはログレベルでフィルタリングできます)で可能になり、ログキャットウィンドウから不要な例外を「削除」する方法を提供します。
編集 問題がパフォーマンスの場合(コメントによると)、心配する必要はないと思います。
- 悪いパフォーマンスを見つけた場合、バッチインサートでトランザクションを有効にすることで、さらに多くのことを得ることができます。
- また、アプリケーションに「起動データ」を挿入する場合、事前にロードされたデータベースでAPKを出荷することを検討しましたか?実行時にすべてを挿入する代わりに、自分で準備した既存のデータベースをコピーするだけです。制約問題はもうありません。また、ユーザーにとってほぼ瞬時に開始されます。もちろん、それが動的バッチインサート(実行時に定義されたユーザーエントリまたは外部パラメーターに基づいて)である場合、それは不可能です。