我正在开发一个由几项活动组成的应用程序:
以下更多信息:
从现在开始,我一直在使用bundle来在活动之间交换数据,但随着操作数量的增加(某些操作使用3-4个活动从用户收集数据),它似乎使代码复杂化。将所有数据传递给每个创建的活动似乎都不太好。
我正在考虑将“用户名”和选定的“事件”存储为类的静态字段。我会非常简化代码,但是我不确定如果用户在某个时候说“主页按钮”并运行另一个需要大量内存的应用程序,这些数据是否会持续存在。
存储在静态字段中的数据是否安全?
答案 0 :(得分:5)
最好有一个自定义的Application对象并将它们存储在那里。应用程序对象将与您的应用程序一样生效。
http://developer.android.com/reference/android/app/Application.html
您可以通过将getApplicationContext()强制转换为您的自定义应用程序类型来访问Application对象:
public class CustomApplication extends Application {
private String userId;
public void onCreate() {
super.onCreate();
...
}
public String getUserId() {
return userId;
}
...
}
来自活动电话:((CustomApplication) getApplicationContext()).getUserId();
答案 1 :(得分:3)
没有。您不能保证这些都将存在于同一个类加载器中,在这种情况下,您将在不同的地方处理这些类的不同副本,而不是访问相同的共享状态。
现在可能正常工作;但不是我称之为“安全”的东西。
答案 2 :(得分:1)
您可以使用SharedPreference而不是使用静态变量/对象进入类。查看此博客http://android-er.blogspot.com/2011/01/example-of-using-sharedpreferencesedito.html
答案 3 :(得分:1)
您应该按照设计使用意图系统。静态和活动可能会被Android肆无忌惮地杀死。甚至Application类也可能被杀死。
假设您的应用程序包含两个活动,第一个活动允许用户在Application对象中存储一些数据。然后,用户单击按钮以启动显示数据的第二个活动。用户将手机放下并在几小时后回到手机上。
在此期间,Android可能会出于各种原因决定终止该应用。当用户回来时,拿起电话并重新启动应用程序将创建一个新的应用程序对象,第二个活动将被恢复,但用户输入的数据将不再在Application对象中可用,因为它是一个新的Application对象
帮助解决此问题的一种方法是即使对于复杂对象也使用SharedPreferences。 Gson完全能够将它们序列化和反序列化为SharedPreferences。
要模拟此操作,您可以执行以下操作:
$ adb shell ps | grep your.app.package
获取正在运行的应用的pid,然后
$ adb shell kill -9
然后使用任务切换器打开应用程序,您将有一个新的Application对象,但将进行第二个活动。
答案 4 :(得分:0)
静态字段有效但不优雅。你只需要一个单例模式后的会话对象。
答案 5 :(得分:0)
静态数据将在按下主页按钮时保持不变,再次打开应用程序时,您将转到您离开的相同状态,但是当您运行另一个需要大量内存的应用程序时,您可能会丢失所有静态数据。 但是如果你的静态数据非常少,那么它可能会持续存在。
您还可以查找SharedPreference。
答案 6 :(得分:-1)
您可以使用静态,除非您确定此静态变量不会与用户冲突。 静态变量也是类的属性,因此它消耗更多内存,因为生命周期是应用程序级别。 其他我可以建议使用非常方便的共享优惠。您可以通过应用程序的任何活动访问此共享首选项。所以不需要传递bundle并担心静态字段。 最后一个选项是我在您的应用程序中找不到的重要性是"使用数据库来存储和检索"。
希望这有帮助。