アプリケーション バックグラウンド サービスは、sqlite データベースを更新します。したがって、私の活動は時代遅れになっています。アクティビティ インテントには古いパラメーターも含まれているため、onCreate、onResume によってアプリケーションがクラッシュします。最も簡単な解決策は、アプリケーション全体を再起動することです。1 つの特殊なケースを処理するために、すべてのアクティビティのすべての onCreate、onResume メソッドに IF を追加したくありません。
例外が処理された後にACRAが次のコードを実行していることに気付きました。
android.os.Process.killProcess(android.os.Process.myPid());
System.exit(10);
ただし、多くの人は の使用を思いとどまらせますSystem.exit(0)
。System.exit(0)
Android アプリケーションのデータの整合性にとって本当に危険なのでしょうか? もちろん、私のコードは存在する前にデータベースを閉じます。
アップデート:
、コンテンツ プロバイダーの使用方法finish()
、ブロードキャストの送信方法、SO で多くの回答を読む方法などを知っていました。ただし、これらの各アプローチには、さらに数千行のコードが必要です。System.exit(0)
10分で解決策を実装しました。再起動は非常に高速であるため、通常の startActivity アクションと区別がつきません。データベースの更新/再起動は、ユーザーの非アクティブ状態が長くなった後に行われるため、アプリはシステムによって既に中断されています。私のアプリはリアルタイム同期を必要としません。テスト中、アプリケーションは正しく動作します。これは迅速で汚い解決策です。
そのため、副作用の可能性について質問しましたSystem.exit(0)
。どうやってデザインを変えるかではありません。現在の設計が完璧ではないことは承知しています。