1

我开发了一个 Android 应用程序。为了让用户保持登录状态,我将他们的用户名和密码存储在扩展的类中Application。如果用户在未注销的情况下退出应用程序,则会启动一个后台服务,该服务将使用存储在应用程序上下文中的用户凭据(用户名和密码)。

这对我来说效果很好。但现在我已经在我的手机(三星 Galaxy Ace)中安装了 facebook。它有一项占用 37 MB RAM 的服务。现在当我运行我的应用程序的后台服务时。当我玩游戏或有时甚至在我锁定屏幕时(用户名和密码变为空),应用程序级别变量会被杀死。
怎么了?还有什么其他方法可以让用户保持登录状态?我不想使用 sqlite 数据库来存储用户名/密码。您可以轻松查看表格的值。

请注意
,即使这个 facebook 正在运行,我仍然有 38 MB 的 RAM 可用。我的应用程序仅使用 544kb 的内存。

EDIT1
这可能看起来令人惊讶,但我没有对我的代码进行任何更改。但是现在,即使我打开三个或四个应用程序,应用程序变量(用户名和密码)仍然存在。在上面的问题中,我说Application一旦我锁定屏幕,变量就会变为空。但是现在,即使我玩游戏(打开另一个应用程序!),它们似乎仍然存在。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 回答