2016-03-23 18 views
2

私はのクラスメンバー変数を初期化するActivityを持っています。場合によってはstartActivity()が必要です。つまり、Activityは停止状態になります。私が戻ってきたら、変数を使う必要があります。アクティビティが停止すると、Androidはアクティビティのメンバー変数をクリーンアップしますか?

これはほとんどの携帯電話で問題なく動作しますが、携帯電話でnullになるため、ユーザーからクラッシュすることもあります。このメンバーにはStringPOJOが含まれています。

Androidはアクティビティのメンバー変数をクリーンアップしてメモリを解放しますか?

+0

メンバーはonCreate()のローカルメンバーですか? –

+0

彼はローカル変数ではないことを意味する「メンバ変数」として記述しました。記述が正確であると仮定します。変数の使用法を探して、 'onStop'のような別の場所に設定していないことを確認しましたか? – nasch

+0

私の説明に申し訳ありません。メンバーは、ローカルではなく、アクティビティに属します。そして私は初期化後に変数を設定しなかったと確信しています。 –

答えて

1

これらのメンバー変数は、アクティビティが終了していなくても、onDestroyが呼び出されるとクリアされます。これをシミュレートするには、開発者の設定で「アクティビティを生かしてはいけない」をオンにします。それが有効になっていたら、

は、この問題を回避するには(つまりは、ホームボタンを押して)あなたの活動を開始し、それを一時停止し、あなたはonSaveInstanceStateでそれらのメンバ変数を格納し、その後のonCreate

にsavedStateバンドルを使用してそれらを復元する必要があります
+0

しかし、私の活動にはonDestroyが呼び出されていませんでした。それはonStopによって呼び出されたばかりです。 onStopがsometimeと呼ばれるとき、それらのメンバ変数はクリアされますか? –

+0

onDestroyは、finish()を呼び出していなくても呼び出すことができます。これは、メモリが不足しているときなどに発生します。あなたが活動を生き残らないようにしておくと、私の言いたいことが分かります。この場合、onStopとonSaveInstanceStateが呼び出されます。一時停止中にアクティビティが破棄されると、onCreateが再度呼び出され、savedStateバンドルはnullになりません。 – craya

関連する問題