0

現在のアプリケーション データを格納するために、静的フィールドのみを持つ別のクラスを使用しています。sharedpreferencesアプリケーションの起動時に部分的に読み込まれます。残りは、何らかのアクションの結果のようなデータであり、これらの結果 (結果を使用する複数のアクティビティ) をさらに閲覧するために使用されます。

ホーム画面に移動したり、他のアプリケーションを起動したりできます。自分のアプリケーションに戻ると、正しく動作します。

ただし、新Error Reporting機能以降、すべてエラーに関連するバグレポートがいくつかありnullreferenceます。null上記の別のクラスの静的フィールドへの参照であるオブジェクト。

私はバグを再現できないので、これはアプリケーションがメモリ不足のために強制終了されたことが原因であると考える傾向があります。再起動するとoncreate、ユーザーが現在参加していたアクティビティから呼び出されます。ただし、別のクラスのすべての静的データ復元されないため、クラッシュします。

知りたいのですが、アプリケーションが強制終了された場合に、最後に使用されたアクティビティから開始せずに、アプリケーションを強制的に「再起動」する方法はありますか? それともそれが標準的な振る舞いですか?プログラムでこれを行うことはできますか? 静的フィールドが null の場合のように、アプリを再起動しますか?

4

1 に答える 1

2

ユーザーがいた場所でアクティビティを再開するのは通常の動作です。これは、アプリが閉じられていないようにユーザーに見せることを目的としています。あなたが見ることができる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()です。その後、そこから必要な情報を取得し、静的クラスの値を復元できます。

onResume()もう 1 つの方法は、任意のアクティビティのメソッドで値を確認するだけです。値が何らかの形で null または間違っている場合は、元のアクティビティと開始中のアクティビティの start を呼び出すことができますfinish()

于 2010-05-27T11:42:19.197 に答える