特定のアクティビティ画面でユーザーが大量のデータを入力できるアプリがあります。ユーザーが何らかの理由で突然この画面から移動した場合、データをアプリの SQLite データベースに保存します。このアプリは 2 年近くリリースされており、ANR タイムアウトに遭遇したことはありませんが、先月以内に市場で 2 つのレポートを受け取りました。
あるケースでは、データベースを閉じようとしたときに問題が発生しました。それ以外の場合は、データベースを開こうとしたときに問題が発生しました。問題をまったく再現できませんが、実行されている手順の正確な順序はわかりますが、何を変更できるかがわからないという問題があります。どちらも、データベースのミューテックスを保護することを中心に展開しました。ミューテックスは自分で作成しません。これはシステムの問題です。
基本的に、onPause が呼び出され、データベースが開かれ、データがファイルに書き込まれ、データベースが閉じられます。私が理解している限り、これは、データを SharedPreferences に格納できない場合 (私のデータは格納できない) の場合の適切な方法です。
データベースを開いたり閉じたりするのに時間がかかる理由がわかりません。私の唯一の仮定は、これらの問題は、アプリを非常に長い間使用しているユーザーから発生しているため、データベース ファイルが非常に大きくなり、システムがデータベース ファイルをロックするのに時間がかかる可能性があるということです (私はここで推測するだけです)。
onPause から AsyncTask を開始することも考えましたが、それは間違っているようです。助言がありますか?