1

Android アプリケーションを開発しました。ユーザーのログイン状態を維持するために、ユーザー名とパスワードを拡張するクラスに保存していますApplication。ユーザーがログアウトせずにアプリケーションを終了すると、アプリケーション コンテキストに保存されているユーザー資格情報 (ユーザー名とパスワード) を使用するバックグラウンド サービスが開始されます。

これは私にとって非常にうまくいきました。しかし今、私は自分の携帯電話 (Samsung galaxy Ace) に facebook をインストールしました。37 MB の RAM を占有するサービスがあります。アプリケーションのバックグラウンド サービスを実行すると、ゲームをプレイしているとき、または画面をロックしているとき (ユーザー名とパスワードが null になることもあります) で、アプリケーション レベルの変数が強制終了されます。
何が起こっている?ユーザーのログイン状態を維持するには、他にどのような方法がありますか? ユーザー名/パスワードを保存するためにsqliteデータベースを使用したくありません。テーブルの値を簡単に確認できます。 この facebook を実行していても、まだ 38 MB の RAM を使用できることに

注意してください。
私のアプリは 544kb のメモリしか使用しません。

EDIT1
これは驚くかもしれませんが、コードに変更を加えていません。しかし今では、アプリケーション変数 (ユーザー名とパスワード) は、3 つまたは 4 つのアプリケーションを開いた場合でも存続します。上記の質問でApplication、画面をロックするとすぐに vairables が null になると言いました。しかし今では、ゲームをプレイしているときでも持続しているようです (別のアプリケーションを開いて!)。Applicationしたがって、変数を殺すのはメモリの制約ではないことは明らかです。
これの理由は何ですか?アプリケーション レベル変数の強制終了を決定するものは何ですか?

4

3 に答える 3

1

SharedPreferences を使用して、探しているものを実現できます。

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
Editor editor = preferences.getEditor();
editor.putBoolean("user_logged_in", true);
// ... anything else you want
editor.commit();

また、同じことを行って設定を取得することもできます。

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
boolean userLoggedIn = preferences.getBoolean("user_logged_in", false);

データを安全に保つ方法は、話の別の部分です。これらの方法は、ルート化されていないデバイスでうまく機能します。また、セキュリティは資格情報の暗号化に依存します (できれば非対称暗号化アルゴリズムを使用します)。

于 2012-07-28T13:56:10.453 に答える
0

ユーザー名/パスワードの暗号化のみを使用できます。検索すると、いくつかのサンプル コードが表示されます。ユーザーがデバイスの電源をオフにすると、アプリも停止します。

于 2012-07-28T14:19:14.817 に答える
0

バックグラウンド サービス oncreate で、setForeground メソッドを呼び出します。

public void onCreate() {
super.onCreate();
...
this.setForeground(true);
...
}

setForeground メソッドは、システムによって強制終了されないようにサービスを保護できます。これはあなたを助けることができると思います。^-^

于 2012-07-28T14:19:44.577 に答える