こんにちは私たちはアンドロイドアプリケーションで奇妙な問題に直面しています。私たちのアプリでは、アプリケーションを起動するときに、最初のアクティビティとして、必要なすべてのオブジェクト/データを共通オブジェクト(オブジェクトAと呼ばれます)に格納しています。そのオブジェクトにコンテキスト自体を格納しました。私たちのアプリでコンテキストが必要なときは、オブジェクトAからコンテキストを取得して使用しています。以下の場合を除き、すべてのケースが正常に動作します。
i)私たちのアプリはバックグラウンドにありますが、ハイエンドのゲームをプレイしました。今度は、最小化された画面(最近のアプリ)でアプリに戻りました。突然アプリがクラッシュします。
ii)設定でアプリを強制停止し、最小化された画面でアプリに戻った場合、同じクラッシュが発生します。オブジェクトがnullになる
どちらの場合も、オブジェクトAはnullになります(GCによって削除される可能性がある)ので、オブジェクトAに依存するすべての操作が例外を受け取ります。
どうしてですか? GCがオブジェクトAを収集しないようにするにはどうすればよいですか?どのように我々は力の停止に対処することができますか?アイデアを教えてください。
GCやシステムが強制的にプロセスを強制終了することはできません。そのような場合には、オブジェクトをシリアライズ/デシリアライズする方法を見つける必要があります。 –
これはおそらく、Androidアプリを書くときに理解しておくべき最も重要な概念です。 http://developer.android.com/training/basics/activity-lifecycle/index.html – Kuffs
Android(実際にはDalvik)は、アプリが実行されていない限り、Androidへの参照がない限り、個々のオブジェクトをGCしません。私はこの神話がどこから始まったのか分かりません。あなたの** app **は殺されるかもしれません。その場合、すべてがゼロから始まります。状態を保存する必要がある場合は、 'onPause()'や 'onStop()'を使って直列化してください。 'onDestroy()'は、アクティビティを 'finish()'した場合にのみ便利です。ところで、あなたが格納している 'context'が' Activity'コンテキストであれば、あなたはそれをすべて間違っています。 – Simon