Android:アプリケーションが殺害されたとき、新しいスタートアップのエントリポイントを設定する方法は?
-
05-10-2019 - |
質問
静的フィールドのみを備えた別のクラスを使用して、現在のアプリケーションデータを保存しています。それは部分的にから入力されます sharedpreferences
アプリケーションの起動時。残りは、これらの結果をさらに閲覧するために使用される何らかのアクションの結果のようなデータです(結果を使用する複数のアクティビティ)。
ホーム画面に移動したり、他のアプリケーションを開始したりすることができます。自分のアプリケーションに戻ると、正しく機能します。
しかし、新しいので Error Reporting
機能私はすべてに関連するいくつかのバグレポートを取得します nullreference
エラー。そのオブジェクト null
前述の別々のクラスの静的フィールドへの参照です。
バグを再現できないので、これは記憶が低いためにアプリケーションが殺されたためだと思う傾向があります。 oncreate
ユーザーが現在入っていたアクティビティから。ただし、個別のクラスのすべての静的データは復元されないため、クラッシュします。
知りたい:アプリケーションに完全に「再起動」するように強制する方法はありますか?そして、それが殺された場合、最後の使用されたアクティビティから始めるのではありませんか?それとも標準的な動作ですか?これをプログラムで行うことはできますか?静的フィールドがnullの場合のように、アプリを再起動しますか?
解決
ユーザーが普通の動作であるアクティビティを再起動すること - アプリが閉じられなかったように、ユーザーに見せることです。あなたが見ることができる2つのことがあります:
protected void onSaveInstanceState(Bundle outState){
// This gets called by the system when it's about to kill your app
// Put all your data in the outState bundle
}
そのバンドルは、アクティビティに渡されるのと同じです onCreate()
. 。その後、必要な情報を取得し、静的クラスの値を復元できます。
もう1つの方法は、 onResume()
あなたの活動のいずれかの方法。値が何らかの方法でnullまたは間違っている場合は、元のアクティビティを開始して呼び出してください。 finish()
開始されているもの。