私はサービスを開始するアクティビティを持っています。また、シングルトンData
も含まれています。ホーム画面に移動してアクティビティを閉じると、しばらくしてからData
シングルトンが破壊されますが、サービスは実行され続けるはずです。したがって、Data
のいくつかのフィールドは再びnull
になり、サービスはnullpointerを検出します。シングルトンが破壊される
これを防ぐにはどうすればよいですか?
私はサービスを開始するアクティビティを持っています。また、シングルトンData
も含まれています。ホーム画面に移動してアクティビティを閉じると、しばらくしてからData
シングルトンが破壊されますが、サービスは実行され続けるはずです。したがって、Data
のいくつかのフィールドは再びnull
になり、サービスはnullpointerを検出します。シングルトンが破壊される
これを防ぐにはどうすればよいですか?
私が知る限り、Activity
インスタンスはセキュリティのために独自のクラスローダーの内部で起動されます。 Activity
のロードの結果としてロードされるクラスにアタッチされているシングルトンは、そのクラスローダーに結び付けられます。クラスローダーは、アクティビティライフサイクルに関連付けられます。
つまり、私はあなたがこれが起こらないと保証できるとは思わないので、それに頼るべきではありません。
永続状態をシリアル化してから、Activity
が起動したときにシリアル化を解除する必要があります。
あなたが作成するApplication
のサブクラスにあなたのオブジェクトへの参照を保存することが、これを達成する方法の1つです。これは、ほとんどの場合、Service
を作成することなく、または常に状態をシリアル化する必要がなく簡単な回避策です。
次に、次の状況についてのアイデアはありますか?サービスは定期的にいくつかのデータを取得し、 'Data'インスタンスに格納します。アクティビティはアクティブなときに、このデータをUIに表示します。 – nhaarman
このような理由から、シングルトンはAndroidで少しトリッキーなので、避けています。代わりに、 'onPause()'でデータをシリアライズして 'onResume()'を復元し、従属クラスがあなたのアクティビティの 'Data'のマネージインスタンスにアクセスするようにしたいとします。 –