在Android活动中共享状态

时间:2013-03-06 09:16:44

标签: android android-intent android-activity

我在不同活动之间传递状态数据时遇到了麻烦。现在我有四个:

  • 活动之间的坐标(一个大的onActivityResult方法)并且没有真正的UI(只是一个空白的布局)
  • B添加了一些数据(字符串)
  • C添加一些数据(拍照)
  • D在上传之前显示对数据的评论,之后删除状态

首先,我将此工作流的状态存储在活动A的实例变量中,但大多数时候Android从B返回时有垃圾收集A(可能是因为方向更改)所以我得到空指针异常。然后我尝试将状态存储在一个parcelable对象中,该对象是在B返回A时生成的结果,然后将该对象传递给C.它到达C时很好,但是当我再次从C中分配对象时返回到A它由于某种原因没有到达。当试图将对象从A交给D时,这导致另一个NPE。

最后,需要删除数据:上传后D或者中途关闭应用程序并且不完成所有活动。你将重新开始A(或B,这是一个实际可用的活动)。

到目前为止,我现在的结构感觉比应该更复杂。我认为活动A应该被删除。但我不确定应该在什么地方实施。 另外我不确定如何使活动C可重复2或3次,每次添加数据,然后再转到D.可能的解决方案我发现:

  • 使用含有FLAG_ACTIVITY_FORWARD_RESULT的意图并将活动链接在一起,如How to return a result through multiple activities
  • 中所述
  • 使用服务管理状态
  • 来自我桌面上当前的the book:使用Fragments存储状态(使用setRetainInstance方法)
  • 将android.app.Application扩展为管理状态
  • 在SharedPreferences中存储状态(但我会在哪里进行管理?)

我是Android开发的新手......我可能迟早会让他们所有人都工作,但对我的情况有什么合适的解决方案?

2 个答案:

答案 0 :(得分:1)

你应该多关注Activity Lifecycle。在您的情况下,在extras中使用intents and results就足够了。服务和SharedPreferences绝对不是你想要的。对于非常复杂或庞大的数据,扩展应用程序是一个很好的选择,但这看起来不像你的情况。

答案 1 :(得分:1)

您可以使用

android.app.Application class

在您的应用程序中,它是应用程序级别类,它是通过在menifest.xml文件中配置它自动创建的。 您可以通过

访问此类的活动
getApplication();

您可以在此课程中设置应用程序级别数据,也可以在一个活动中设置该应用程序级别数据