Android应用忘记在Resume上登录

时间:2016-04-13 14:48:48

标签: java android

我开发了一个Android应用程序,它以一个登录屏幕的MainActivity开头。成功登录后,它会根据登录信息输入数据并启动默认活动。

  • 从头开始启动应用程序时效果很好。
  • 当应用程序在之前处于后台并且恢复时,它会直接运行最后一个活动(不是登录活动),这很棒。
  • 但有时候 - 我认为在长时间处于后台时 - 我打开应用程序,它从最后一个活动开始按预期启动,但数据未根据登录进行初始化。这就像它将所有应用程序数据丢弃在内存中但仍然无法从头开始。

是否有不同类型的应用程序恢复?有什么方法可以阻止它吗?

4 个答案:

答案 0 :(得分:1)

我们面临同样的问题,事实是,将登录数据存储在Application类中并不是一个好主意(正如您所看到的,很多人都说要将数据保存在Application类中但不要那样做。)

如果您需要在以后的Activity中重复使用它的敏感数据,那么当它在后台运行时,Android可能会杀死您的应用程序,我可以通过运行内存较低的模拟器来重现它,放置您的应用程序在后台和启动很多其他应用程序,如果你在你的应用程序类中的onCreate()方法中放入一个日志,你会看到它随机调用。目前,如果null

中没有重新初始化,则所有字段都将变为onCreate()

您可以使用活动的onSaveInstanceStateonRestoreInstanceState,当应用被杀/恢复时,系统会调用 有很多解决方案可以解决这个问题,但我认为没有理想的方法。只需按照您的需要进行操作。

答案 1 :(得分:1)

如果您将信息存储在静态变量中并卸载了类,则会丢失此信息。

对于全局或会话信息,它必须持久保存到数据存储区,例如SQLite数据库或SharedPreferences。

对于您希望记住并恢复的活动实例的特定数据,请覆盖onSavedInstanceState以保存到Bundle中的onCreaterestore。< / p>

答案 2 :(得分:0)

您没有缓存您的凭据,因此当应用被杀或活动被破坏时,您将失去该状态。

android: how to save username and password in phone cache

给出了如何使用Shared Prefs

执行此操作的一个很好的示例

答案 3 :(得分:0)

使用SharedPreferences保存您的数据

  

<强>初始化

可以使用getSharedPreferences()方法获取应用程序共享首选项。您还需要一个编辑器来编辑和保存共享首选项中的更改。以下代码可用于获取应用程序共享首选项。

SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", 0); // 0 - for private mode
Editor editor = pref.edit();
  

存储数据

您可以使用编辑器将数据保存到共享首选项中。支持所有原始数据类型,如布尔值,浮点数,整数,长整数和字符串。致电editor.apply()以保存对共享偏好设置的更改。

editor.putBoolean("key_name", true); // Storing boolean - true/false
editor.putString("key_name", "string value"); // Storing string
editor.putInt("key_name", "int value"); // Storing integer
editor.putFloat("key_name", "float value"); // Storing float
editor.putLong("key_name", "long value"); // Storing long

editor.apply(); // apply changes
  

检索数据

可以通过调用getString()(For string)方法从保存的首选项中恢复数据。请记住,此方法应在共享首选项上调用,而不是在编辑器上调用。

/ returns stored preference value
// If value is not present return second param value - In this case null
pref.getString("key_name", null); // getting String
pref.getInt("key_name", null); // getting Integer
pref.getFloat("key_name", null); // getting Float
pref.getLong("key_name", null); // getting Long
pref.getBoolean("key_name", null); // getting boolean
  

清除/删除数据

editor.remove("name"); // will delete key name
editor.remove("email"); // will delete key email

editor.apply(); // commit changes

或以下将清除共享偏好设置中的所有数据:

editor.clear();
editor.apply(); // commit changes

例如,检查此Android User Session Management using Shared Preferences 希望有所帮助