android中的应用程序级变量变为空

时间:2012-07-28 13:44:27

标签: android

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

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

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

EDIT1
这可能看起来令人惊讶,但我没有对我的代码进行任何更改。但是现在Apllication变量(用户名和密码)仍然存在,即使我打开三个或四个应用程序。在上面的问题中,我说只要锁定屏幕,Application可变数据就会变为空。但现在,即使我玩游戏(另一个应用程序打开!),它们似乎仍然存在。很明显,不是内存约束会杀死Application变量。
这是什么原因?什么决定了杀死应用程序级变量?

3 个答案:

答案 0 :(得分: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);

如何确保数据安全是故事的另一部分。这些方法适用于未植根的设备。安全性取决于加密您的凭证(最好使用非对称加密算法。)

答案 1 :(得分:0)

您只能对用户名/密码使用加密。搜索周围会给你一些示例代码。如果用户关闭了他的设备,您的应用也会停止。

答案 2 :(得分:0)

在你的后台服务oncreate中,调用setForeground方法:

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

setForeground方法可以防止您的服务被系统杀死。 我想这可以帮到你。 ^ - ^