2011-06-20 17 views
4

私はサービスを開始するアクティビティを持っています。また、シングルトンDataも含まれています。ホーム画面に移動してアクティビティを閉じると、しばらくしてからDataシングルトンが破壊されますが、サービスは実行され続けるはずです。したがって、Dataのいくつかのフィールドは再びnullになり、サービスはnullpointerを検出します。シングルトンが破壊される

これを防ぐにはどうすればよいですか?

答えて

6

私が知る限り、Activityインスタンスはセキュリティのために独自のクラスローダーの内部で起動されます。 Activityのロードの結果としてロードされるクラスにアタッチされているシングルトンは、そのクラスローダーに結び付けられます。クラスローダーは、アクティビティライフサイクルに関連付けられます。

つまり、私はあなたがこれが起こらないと保証できるとは思わないので、それに頼るべきではありません。

永続状態をシリアル化してから、Activityが起動したときにシリアル化を解除する必要があります。

+0

次に、次の状況についてのアイデアはありますか?サービスは定期的にいくつかのデータを取得し、 'Data'インスタンスに格納します。アクティビティはアクティブなときに、このデータをUIに表示します。 – nhaarman

+0

このような理由から、シングルトンはAndroidで少しトリッキーなので、避けています。代わりに、 'onPause()'でデータをシリアライズして 'onResume()'を復元し、従属クラスがあなたのアクティビティの 'Data'のマネージインスタンスにアクセスするようにしたいとします。 –

1

あなたが作成するApplicationのサブクラスにあなたのオブジェクトへの参照を保存することが、これを達成する方法の1つです。これは、ほとんどの場合、Serviceを作成することなく、または常に状態をシリアル化する必要がなく簡単な回避策です。

関連する問題