2

アプリケーションのシングルトン オブジェクトに保存されているユーザー設定がたくさんあります。サンプルモデルは次のようになります -

public class UserContext {
    public static final String WEBSRV_IP = "TRIMMED";
    public static UserContext instance;
    // Contains username, password, if they're valid etc.
    private LoginDataModel loginModel; 
    private ArrayList<FacilityDataModel> model;
    private FilterDataModel filters;

    private UserContext()
    {

    }

    public UserContext getInstance()
    {
        if(instance == null) {
            instance = new UserContext();
        }
        return instance;
    }   
    // Getters and setters
}

これで、ユーザーがアプリケーションを使用するときに、一連のアクティビティが作成され、ライフ サイクルを経て、これらの変数を利用して終了します。(たとえば、onStart()メソッドでは、アクティビティを提示する前にユーザーがログインしているかどうかを確認します)。

私の質問は、Android のドキュメントでは、メソッド内のコンテキスト関連のデータをバックアップするように勧められているようですonPause()。しかしonPause()、自分で新しいアクティビティを作成するたびに呼び出され、次のアクティビティのonStart()メソッドでそれらを復元するためだけに、すべての GlobalVariables をバックアップするのは無駄に思えます。代わりに、アプリケーション全体がバックグラウンドに入ったかどうかを判断する方法はありますか? そうでない場合、実際にすべてのグローバルを保存するのはいつですか?

ありがとう、
テジャ。

4

3 に答える 3

1

ユーザーまたはアプリケーション コードによって設定値が決定された時点で、(SharedPreferences.Editor.commit() を使用して) 設定を保存します。設定が理にかなっていると判断されるまで設定の保存を遅らせるというシナリオにはまだ遭遇していません。

于 2011-04-20T17:37:11.087 に答える
1

各アプリケーションのケースは異なると思います。そのアクティビティの状態を保存する必要がある場合、 onPause() は嫌な考えではありません。ユーザーが自分の別のアクティビティに移動してからホーム ボタンを押したらどうなるでしょうか。アプリケーションは onStop() によって停止状態に移行します。彼らがアプリケーションを再起動した場合、以前の状態が保持されているという合理的な期待 (おそらく) があります。

それらを保存することが理にかなっているとき、私はそれらを保存します。たとえば、最後に送信したメッセージをユーザーに保存させる SMS アプリケーションがあります。クリック送信時に最後のメッセージを保存します。onPause() や onStop() は何もしませんが、ユーザーが期待するときにすべてを完了します。

開発者は伝統的に if ロジックを嫌いますが、賢明な友人はいつも、「if ロジックはユーザーの頭の中にある」と思い出させてくれます。私がこれを行うと、これが起こります...私の場合; メッセージを送信すると、メッセージが保存されます。

于 2011-04-20T16:04:58.053 に答える
0

onPause() が呼び出され、onStop() が呼び出されないのは、アクティビティが部分的にのみ隠されている別のアクティビティの下に実際にまだ表示されている場合のみです。ほとんどの場合、onStop() も呼び出されます。独自のアクティビティ構造で常に他のアクティビティを完全に覆い隠していることがわかっている場合は、onStop() で保存し、onStart() で復元することを検討します。

また、一般的に言えば、onPause() で保存したものはすべて onResume() で復元する必要があることも覚えておいてください。onStop() で保存されたものは、おそらく onStart() で復元する必要があります。onPause() が発生しても onStop() が発生しない場合... onStart() は呼び出されません。

また、Bill Mote の声明に同意することも付け加えておきます。意味のあるときに保存する必要があります。アクティビティ ライフサイクル フレームワークをしっかりと理解したら、通常は適切な選択を行うことができます。

于 2011-04-20T16:06:41.560 に答える