2010-12-30 5 views
5

この問題を解決するのを手伝ってください。実際にアプリケーションを保存状態のためAndroid:メモリ制約のためアプリケーションのスタックが不足している場合のアプリケーションの状態

1 > I am having application which Uses Service to retrieve data from server. 
2 > Now on Pressing Home key and i have opened new application.. 
3 > I have opened around 20 application. 
4 > So my application might go out of memory stack. 
5 > now i am resuming my application, application crashes as i am opening activity of my 
    application which is not in the stack. 

私はこの例外を処理し、アプリケーションの履歴書をホームページや再起動するために私の活動をリダイレクトすることが可能なとにかくされ、スタックではありません...

+0

+1良い質問です。スタックトレースを投稿することもできますか? –

答えて

5

私は自分自身を困惑させる非常に良い質問です。

アプリを強制終了してから電話を再起動するまでの違いは何ですか?
ユーザーが手動でアプリを強制終了したり、他の20個のアプリを開いた場合は、最初からアプリを開始したいと考えています。 携帯電話の再起動後にAndroidが状態を復元しない理由を教えてください。

また、(システムによって)アプリが強制終了されると、アクティビティの再起動時にグローバル変数がnullに変わります。 この種のJavaの概念が壊れています。アプリケーションに何らかの状態があり、アプリケーションがその状態を消去した場合、アプリケーションを再起動すると思います。

私が提案する解決策:

1. Handle the case of a state problem: Initiate a simple state (new Object()) as a global variable. For each Activity, in the methods onCreate/Start/Resume check that the state is null. If it's null launch the first activity with 'Intent.FLAG_ACTIVITY_CLEAR_TOP' - as if the application is relaunched. 
2. Try not to use global variables - Always put data in the intent. 
3. Lazy load global variables - If you do want to use global data, don't count on one time initialization. Lazy load them 'if (A.MY_DATA == null) {A.MY_DATA = new ...}' - Don't forget to do it in the background if it will take a long time (AsyncTask). Loading partial state needs to be done carefully because it may not comply to other loaded state objects. 

最初のポイントのマイナス面は、状態に問題の取り扱いは(AOPがまだのAndroidに実装されていない)すべての活動に行われる必要があるということです。

希望しました。

+0

ありがとう、最初のポイントは本当に役立った。 – pcans

0
+0

これは大丈夫ですが、共有設定に保存するものは何ですか?私はアプリケーションの状態を取得する方法を意味します... –

関連する問題