Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/191.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android中的应用程序级变量变为null_Android - Fatal编程技术网

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

android中的应用程序级变量变为null,android,Android,我开发了一个Android应用程序。为了让用户保持登录状态,我将他们的用户名和密码存储在扩展应用程序的类中。如果用户未注销就退出应用程序,将启动backgound服务,该服务将使用存储在应用程序上下文中的用户凭据(用户名和密码)这对我来说非常有效。但现在我已经在手机上安装了facebook(三星galaxy Ace)。它有一个占用37MB内存的服务。现在,当我运行应用程序的后台服务时。当我玩游戏时,或者有时甚至当我锁定屏幕时(用户名和密码变为空),应用程序级别变量会被杀死。 发生了什么事?还有什

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

这对我来说非常有效。但现在我已经在手机上安装了facebook(三星galaxy Ace)。它有一个占用37MB内存的服务。现在,当我运行应用程序的后台服务时。当我玩游戏时,或者有时甚至当我锁定屏幕时(用户名和密码变为空),应用程序级别变量会被杀死。
发生了什么事?还有什么其他方法可以让用户保持登录?我不想使用sqlite数据库来存储用户名/密码。您可以很容易地看到表的值。

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

EDIT1
这似乎令人惊讶,但我的代码中没有做任何更改。但是现在,即使我打开三到四个应用程序,应用程序变量(用户名和密码)仍然存在。在上面的问题中,我说只要我锁定屏幕,
应用程序
的VAIRABLE就会变为null。但现在,即使在我玩游戏(打开另一个应用程序!)的时候,它们也似乎一直存在。因此,显然不是内存约束杀死了
应用程序
变量

这是什么原因?什么决定了应用程序级变量的终止?

您可以使用SharedReferences来完成所需的操作

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);

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

您可以使用SharedReferences来完成所需内容

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);

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

您只能对用户名/密码使用加密。四处搜索将为您提供一些示例代码。如果用户关闭设备电源,您的应用程序也会停止。

您只能对用户名/密码进行加密。四处搜索将为您提供一些示例代码。如果用户关闭设备电源,您的应用程序也会停止。

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

public void onCreate() {
super.onCreate();
...
this.setForeground(true);
...
}
setForeground方法可以保护您的服务不被系统杀死。
我想这对你有帮助^-^

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

public void onCreate() {
super.onCreate();
...
this.setForeground(true);
...
}
setForeground方法可以保护您的服务不被系统杀死。
我想这对你有帮助^-^

我的后台服务是意向服务。我不包含任何关于创建的方法。此外,它在一个单独的线程中运行。我的后台服务是一个意图服务。我不包含任何关于创建的方法。此外,它在一个单独的线程中运行。请尝试重写onDestroy()方法,并尝试试用应用程序的生命周期。你可能会偶然发现一些线索。OnDestroy()的方法是什么?就像我说的。后台服务启动前,所有活动均已关闭。只存在扩展“应用程序”的类的变量。我怎样才能检测到这些变量的无效,甚至阻止它呢?很抱歉,请尝试重写应用程序类的onLowMemory()和onTerminate()方法。尝试重写onDestroy()方法,并尝试试用应用程序的生命周期。你可能会偶然发现一些线索。OnDestroy()的方法是什么?就像我说的。后台服务启动前,所有活动均已关闭。只存在扩展“应用程序”的类的变量。我怎样才能检测到这些变量的无效,甚至阻止它呢?很抱歉,请尝试重写应用程序类的onLowMemory()和onTerminate()方法。