跨Android活动共享状态

跨Android活动共享状态,android,android-intent,android-activity,Android,Android Intent,Android Activity,我在不同活动之间传递状态数据时遇到问题。现在我有四个: 活动(一个大的onActivityResult方法)之间的坐标,没有真正的UI(只有一个空白布局) B添加一些数据(字符串) C添加一些数据(拍照) D显示上传前对数据的检查,状态在上传后删除 首先,我将此工作流的状态存储在活动A的实例变量中,但大多数情况下,Android在从B返回时会对A进行垃圾收集(可能是因为方向发生了变化),因此我会收到空指针异常。然后我尝试将状态存储在一个可打包对象中,该对象是在B返回a并产生结果时创建的,然后

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

  • 活动(一个大的onActivityResult方法)之间的坐标,没有真正的UI(只有一个空白布局)
  • B添加一些数据(字符串)
  • C添加一些数据(拍照)
  • D显示上传前对数据的检查,状态在上传后删除
首先,我将此工作流的状态存储在活动A的实例变量中,但大多数情况下,Android在从B返回时会对A进行垃圾收集(可能是因为方向发生了变化),因此我会收到空指针异常。然后我尝试将状态存储在一个可打包对象中,该对象是在B返回a并产生结果时创建的,然后将该对象传递给C。它很好地到达C,但当我再次将对象从C打包以返回a时,由于某种原因它没有到达。当试图将对象从A移到D时,这会导致另一个NPE

最后,数据需要被删除:上传后由D删除,或者如果你中途关闭应用程序而没有完成所有活动。您可以从A(或B,这是一个实际可用的活动)重新开始

到目前为止,我目前的结构感觉比应该的复杂得多。我认为活动A应该取消。但我不确定该如何取而代之此外,我不确定如何使活动C在转到D之前可重复2到3次,每次都添加数据。我找到了可能的解决方案:

  • 将意图与标记\活动\转发\结果一起使用,并将活动链接在一起,如中所述
  • 使用服务管理状态
  • 从目前我桌上的情况来看:使用片段存储状态(使用setRetainInstance方法)
  • 扩展android.app.Application以管理状态
  • 将状态存储在SharedReferences中(但我在哪里执行内务管理?)

我是Android开发新手。。。我可能迟早都会让所有这些问题都得到解决,但对于我的情况,什么是合适的解决方案呢?

你应该更加注意。在你的情况下,这将是足够的使用在你的工作。服务和SharedReference绝对不是您想要的。对于非常复杂或庞大的数据,扩展应用程序是一个很好的选择,但这与您的情况不同。

您可以使用

android.app.Application class
在您的应用程序中,它是应用程序级类,通过在menifest.xml文件中配置自动创建。 您可以通过以下方式访问活动中的此类:

getApplication();
您可以在这个类中以及从一个活动中设置应用程序级数据,并在另一个活动中使用它

我正要键入“但是我已经在使用附加程序了!”但是我在代码中又遇到了一个好运气,注意到我在活动中使用getIntent().getParcelableExtra()作为onActivityResult(int-requestCode,int-resultCode,Intent-Intent-Intent)方法,而不是intent.getParcelableExtra()。难怪我让NPE——为了更好的衡量,我将“意图”改为“结果元素”: