0

アクティビティといくつかの変数があります。それらは前のものから渡されます。senerioは:-ユーザーがホームボタンをクリックしてメイン画面に戻ると、しばらくしてユーザーがアプリケーションアイコンをクリックしてアプリに戻ると、アプリがクラッシュしました。これは、Androidシステムがアクティビティなどを強制終了してから実行しようとしたためだと思いますがonCreate()、残念ながらNullpointerExceptionアプリがクラッシュしました。

これを修正するためのアイデア、またはこの例外を除いて何をすべきですか?ありがとう。

メリークリスマスをよろしくお願いします。

4

1 に答える 1

1

「ホーム」を押すと、コントロールはホームアプリケーションに移動し、現在のアプリケーションがバックグラウンドにプッシュされます。Androidは、メモリを再利用するためにいつでもプロセスを強制終了する可能性があります。

アクティビティに戻ると、同じインスタンスであるか(Androidがプロセスを強制終了しなかった場合)、アクティビティの新しいインスタンスである可能性があります。

メモリが非常にタイトで、アクティビティから先に進む場合にも同じことが起こります。アクティビティが解放される可能性があります。[戻る]を押すと、同じ問題が発生する可能性があります。

データを保持する場合は、onSaveInstanceState(Bundle)を使用して、回復するデータを保存する必要があります。

onCreate()はバンドルを引数として取ることに注意してください。アクティビティが一時停止された場合(Homeを押したときなど)、onSaveInstanceState()が呼び出されてデータを一時的に保存し、同じデータがonCreate()に戻されます。アクティビティが新しく起動されている場合、そのバンドルはnullになります。

したがって、次のようなことを行う必要があります。

public void onSaveInstanceState(Bundle bundle) {
    super.onSaveInstanceState(bundle);
    // store data in the bundle
}
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (savedInstanceState != null) {
        // read old data from the Bundle
    } else {
        // you're starting clean; no saved data
    }
    ...
}

いくつかの注意:

  • バンドルに保存されるすべてのデータは、プリミティブ、シリアル化可能、またはそれ以上のパーセル可能である必要があります
  • android:idが設定されているAndroidのビューのデータは、バンドルに自動的に保存され、アクティビティが再作成されるときに取得されます(たとえば、EditTextに入力されたデータは保存されます)
  • Android Viewの一部ではないその他のデータは自動的に保存されず、カスタムビューのデータも保存されません

お役に立てれば!

于 2012-12-24T06:10:29.990 に答える