バックグラウンドでSQLiteデータベースの移行(作成またはアップグレード)を行うためのAsyncTaskがあります。どういうわけか、IOExceptionまたはSQLiteExceptionがdoInBackground内でスローされ、データベースの状態が目的の状態にない可能性があるため、アプリが実行を継続することは無意味であるとしましょう。私はこの状況で何をすべきかについて少し混乱しています。
アプリケーションをできるだけ早くクラッシュさせ、エラーメッセージ付きのダイアログを表示することを考えていますが、doInBackground内でこれを行う方法がよくわかりません。理由は、次のとおりです。
- この関数はUIスレッドでは実行されないため、ダイアログを表示できるかどうかわかりません。
- AsyncTask内の現在のアクティビティにアクセスする方法がわからないため、 finish()できません。
- どういうわけか、例外を上位層にスローしてアクティビティに処理させたいのですが、doInBackgroundがIOExceptionをチェック済みの例外としてリストしていないため、それは不可能です。
この状況を優雅に処理する方法について誰かがアドバイスを持っていますか?