2012-10-23 136 views
0

我想将数据从活动传递到服务。目前我正在尝试使用ArrayList<HashMap<String, String>>。我有什么选择将其传递给服务?我正在考虑将它作为额外的数据在意图,但我不知道如何做到这一点。或者是否有可能将此设置为某种全球?Android ArrayList <HashMap <String,String >>

目前它被设置为活动的静态,并且服务正在回调到要与ArrayList中的下一项一起提供的活动。我对这种工作方式并不满意,所以想将列表移到服务中。

编辑

在回答下面提出的问题:

我试图通过播放列表(是的,另一个媒体应用程序)的服务。播放列表ArrayList<HashMap<String, String>>约束配对歌曲信息,如“歌曲标题”,“这是一个标题”。

但我认为我对应用程序的生命周期感到困惑。当用户点击播放时,该服务被创建。如果我使用静态列表,创建服务时会看到该列表。因此,该服务将乐意继续播放此列表中的歌曲。但是,如果用户更改文件夹等,我如何让应用程序识别播放列表中的更改?应用程序的设计方式是,用户可以随时清除列表中的曲目,也可以浏览到不同的文件夹。当歌曲完成时,应该加载新的列表。这样做的最好方法是什么?或者,我现在做的最好的方式是什么?当歌曲完成后,将广播发送回请求下一首曲目的主要活动。我应该在此时销毁服务并允许“下一首歌曲”功能重新创建吗?

生命周期混淆!

+0

你试图传递给服务的是什么样的数据? hashmaps数组? – SemperFly

+0

如果你实现了一个Parceable对象,你可以把它作为一个额外的intent-correct?你不能那样做? – smk

+0

假设你已经完成了在服务到达时编辑数组列表,你是否尝试导入静态变量而不是简单地调用它? – mango

回答

1

ArrayListHashMap实施Serializable,所以你应该能够将你的结构填入意图,并使用Intent.getSerializableExtra()检索它。

在您的活动中,您只需调用Intent.putExtra(String name, Serializable value)过载。

作为一个经验法则,尽可能避免在应用程序中出现静态变量。当您的应用程序被操作系统关闭然后重新创建(即从最近的应用程序列表中)时,它们会变得棘手。

+0

是的,我同意,我希望尽可能避免静态,这就是为什么我希望有更好的方式传递数据。为了传递可序列化的数据,我需要一个自定义类来写这个,或者我可以在适当的时候向它抛出'ArrayList'? –

+0

查看我的更新回答。你所需要做的就是将'ArrayList'传递给'intent.putExtra()'。 – wsanville

1

您是否考虑过将数据存储在数据库中,并简单地发送数据已更改的意图?或者使用一个ContentProvider来“单独”发信号表示数据已经改变并且需要重新加载?这样,即使应用程序无法完全关闭,您也不会使用状态。

+0

我没有考虑过这个,但它不是我之前做过的。我能麻烦你通过lifecyle说说我吗?我在想:创建播放列表,保存到数据库。点击播放,开始服务。服务检查数据库的内容,播放轨道1。在下一个/完整播放曲目2.如果用户更改播放列表,该服务如何知道?活动如何知道歌曲2已经开始? –

+0

您将使用Intent触发服务,包含例如一个枚举NEW_PLAYLIST,START,PAUSE,...服务可以通过(本地)广播来表示歌曲完成,然后在活动中处理。我仍然必须亲自尝试一下。 – koljaTM

相关问题