In my app, I have a singleton class which communicates with all the activities and has all the app data. All of a sudden the object has started becoming null. It seems to be happening when i change top level activity (using intent). Is there a simple method the make sure that as long as my activity is visible the object persists.
3 に答える
新しいトップレベルのアクティビティが新しいプロセスで作成されたと思います(http://developer.android.com/reference/android/app/Activity.html#ProcessLifecycleの行間を読んでください)。
Android は、バックグラウンドに存在するアクティビティのプロセスを強制終了する可能性が高く、これにはトップレベルのアクティビティが別のアクティビティの背後に落ちた場合も含まれます。
より良い解決策は、シングルトンがnullの場合は透過的に初期化し、必要に応じてディスクから状態をロードして保存することです(かなり標準的なシングルトンパラダイム)。古いアクティビティと新しいアクティビティにまたがる単一のインスタンスで問題を解決する方法はありません。
編集:サービスが進むべき道であるとは確信していません。サービスは、電話のバックグラウンドでアクティビティを実行するためのものですが、あなたが話しているのはデータの保存と検索です。それを行う最も自然な方法は、各アクティビティが最初のアクティビティであるかどうかにかかわらず堅牢であることだと思います。
私だったらService
、シングルトンの代わりに を使用して、アクティビティ間で共有されるアプリ データを管理します。それははるかに堅牢になります。
詳細については、サービス開発者ガイドを参照してください。
シングルトンを間違って使用しているに違いありません。アプリケーションの存続期間中、シングルトン オブジェクトは有効である必要があります。このアプリケーション内のアクティビティが再作成および破棄されても問題ありません。
ただし、シングルトンがアクティビティ (アクティビティ コンテキスト、ウィジェットなどのアクティビティ変数など) を参照している場合、シングルトン オブジェクト自体がまだ有効であっても、ある時点でそれらの変数/コンテキストが無効になる可能性があります。