2013-05-17 16 views
1

我在程序中有几个活动。可以说,活动A,B和C.如何在活动之间保留数据

活动A是在这种情况下的main activity。它包含对象X,必须可供所有其他活动(活动:B和C)访问。

活动A将开始活动B,然后B将开始С.之后,活动A和B都在后台,并且可以由操作系统为killed。我应该如何将对象X传递给活动B和C,以确保当A & B被杀时对象X不会被杀死?

+0

您是否需要自定义对象或原始数据类型?如果后者是这种情况,可以使用SharedPreferences。 – Lennart

+0

用于自定义对象。 – Roman

回答

1

为什么你不能用SingleTon创建你的X对象?只要你愿意,你可以保持它活着,你可以从任何你想要的地方得到相同的实例。

public class TestObject { 

private static TestObject testObjectInstance; 

/* put you data here */ 

    private TestObject() { 

    } 

    public TestObject getTestObjectInstance() { 

     if (testObjectInstance != null) { 

      return testObjectInstance; 

     } else { 

      testObjectInstance = new TestObject(); 
      return testObjectInstance; 
     } 
    } 

    public TestObject createNewTestObjectInstance() { 

     testObjectInstance = new TestObject(); 

     return testObjectInstance; 
    } 
} 
+0

谢谢。我不知道这个窍门。当testObjectInstance将被销毁?就我所关心的而言,只有当这个过程被杀死时它才会被杀死,不是吗? – Roman

+0

看看这个StackOverFlow问题,它已经被讨论过了。 [SOF问题](http://stackoverflow.com/questions/13891186/static-singleton-lifetime-in-android)。 正如在这里已经讨论过的,不要使用可能导致内存泄漏的活动实例的SingleTon。 – osayilgan

0

有三种可能的方式:在这里提到的

其中两个。

  1. Via SharedPreferences。但请记住,SharedPreferences在应用程序关闭时保留该值。如果您希望该值在您的应用程序中“永久”,这是最佳解决方案。

  2. 创建一个单例对象。如果您想要在所有活动中操作对象但不想将其保存为其他运行,这是最佳解决方案。

  3. 通过附加功能发送数据。如果您只想要对象的VALUE并且不想操纵它,这是最好的解决方案。

0

尝试IntentputExtra()功能只能使用它的原语。

如果X是只包含原语,你可能会写在X,public Intent fillIntentWithX(Intent intent)内搭意图对象作为参数的函数,并填写在X原语的意图对象,并返回意图对象。

同样,在X,public X getXFromIntent(Intent intent)中写入另一个函数,它将意图作为参数,提取驻留在其中的基元以形成新的对象X并返回它。

  • 使用fillIntentWithX()来填充的意图,这将启动B,与 对象X的属性。

  • 使用getXFromIntent()在 活动B中提取X,依此类推。

+0

谢谢,但我需要操纵一个复杂的对象,而不是原始的。所以要使用Extras,我必须实现Parcelable接口(我这么认为)。 – Roman