Android ArrayList <hashmap <string,string =“”>&gt; </hashmap <string,>

时间:2012-10-23 21:35:33

标签: android android-intent arraylist hashmap parcelable

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

此时它被设置为活动的静态,并且服务正在回调活动以提供ArrayList中的下一个项目。我不满意这是如何工作的,所以想把列表移到服务中。

修改

回答以下提出的问题:

我正在尝试将一个播放列表(是的,另一个媒体应用程序)传递给该服务。播放列表ArrayList<HashMap<String, String>>与成对的歌曲信息相对应,例如“songTitle”,“这是一个标题”。

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

生命周期混乱!

2 个答案:

答案 0 :(得分:1)

ArrayListHashMap都会实现Serializable,因此您应该只能在Intent中填充结构,并使用Intent.getSerializableExtra()检索它。

在您的活动中,您需要做的就是调用Intent.putExtra(String name, Serializable value)重载。

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

答案 1 :(得分:1)

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