替代用于在活动之间传递对象的全局变量

时间:2014-09-24 12:01:23

标签: android

我需要在活动之间传递一个对象列表,我在我的Application类中使用一个公共静态全局变量。

问题是,当活动在后台进行一段时间后,这个变量似乎是第一个被销毁的变量。

我从来没有遇到过后台活动的问题,但每当我使用像这样的全局变量时,它总是第一次被垃圾收集或者内存收费。这会导致我的应用程序崩溃。

如何防止这种情况发生?

3 个答案:

答案 0 :(得分:1)

最简单的解决方案是include the objects in the intent,即启动其他活动。这要求您的对象实施ParcelableSerializable

然后打电话:

Intent intent = getIntent();
intent.putExtra("myobjects", listOfObjects);
getContext().startActivity(intent);

答案 1 :(得分:1)

将其存储在全局变量中是一种糟糕的方法。 您应该序列化您的类或创建一个Singleton模式并将该对象存储在其中。

可序列化方法

public class ClassIntanceOne implements Serializable{
}

//In Activity
ClassIntanceOne class_instance_one = new ClassIntanceOne();
Bundle bundle = new Bundle();  
bundle.putSerializable("object1", class_instance_one);
intent.putExtras(bundle);
startActivity(/*Your class*/);

答案 2 :(得分:0)

在android中使用globel静态变量是不好的做法。当您的活动进入后台时,GC将始终将其删除,因为不再使用该值。也不要在需要时尽量将对象留在内存中。这可能会导致内存较少的设备性能下降。

就像SME_Dev所说的那样,你需要对你的对象进行序列化并将它们作为活动的额外意图传递给它。

当您可以对对象进行分类时,如果因为您可以在android中使用recreating mechanism而被销毁,则还可以更轻松地恢复应用的当前状态。