2

我正在寻找一些关于意图与应用程序上下文的一般建议。

当您的应用程序具有执行诸如线程网络侦听器之类的服务和/或收集位置信息以与主 Activity 在结构化集中共享的服务时,主 Activity 将不得不在用户输入时调整所述数据,什么在这些级别之间共享这些数据是最聪明的方式吗?

现在我有一个使用 Intents 的设置,但我不喜欢它,尽管它现在可能会做。我无法完整地序列化数据,所以我在这里和那里广播位。主要问题是我的 Intent 用于更新的主要数据集存储在主 Activity 中。

我想将数据集移动到我的服务中,或者将其存储在应用程序上下文中。但是我担心线程安全,因为主 Activity 偶尔会调整数据。例如,单击一次,更改布尔值,或从数据集中删除项目等...

我明白了意图的意义,但我想将意图广播为需要存储在应用程序上下文中的数据的函数的触发器,而不是作为在应用程序周围改组数据(部分数据)的工具。

我是否可以合理地使用 Application 上下文以安全的方式在 Service 和 Activity 之间更新和共享数据?我希望我的服务在后台运行,并且活动在用户返回应用程序或更改方向时拉取或更新数据集。谢谢。

更新/澄清

这个怎么样。访问绑定的服务 getter/setter 方法进行数据共享是否安全?我绑定到我的服务以通过公共方法启动/停止线程函数,(自从我跳回去并意识到我正在绑定以来已经有一段时间了)我可以以这种方式安全地调用 getter/setter 吗?

4

2 回答 2

0

我建议您不要尝试创建自己的解决方案,而是考虑 MVC 模型。

如果您需要在两个 [C] 控制器(例如 Activity、Fragment 等)之间传递数据,您应该将它们保存在 [M]odel 中,它以您可以(反)序列化数据的方式实现。

是否使用 SQlite(或某些 ORM)、SharedPreferences、文件存储(可能是序列化 json)、文件内的二进制 blob(请参阅ObjectOutputStreamObjectInputStream)或其他 [M]odel 实现,完全取决于您的自定义用例。

在上下文中静态存储数据通常是非常讨厌的想法,因为系统和用户如何使用您的应用程序。

考虑更多的用例,例如制作独立线程来获取数据并将数据持久保存到 [M] 模型中。如果您的 [M] 模型将是某种静态变量或应用程序上下文变量,您将始终需要坚持使用它并处理同步、等待/加入/通知等混乱。如果您的 [M] 模型将是独立的 SQL(或 noSQL)数据库,您可以使用观察者来通知 [M] 模型更改并且根本不需要上下文。

从 中可以看出android.os.NetworkOnMainThreadException,您应该对数据进行任何异步处理。无论数据是在线存储、存储在本地数据库、文件系统还是上下文中。坚持这些知识,并尝试提出自己的解决方案。

于 2013-04-24T19:16:31.337 回答
0

要传达活动和服务,您可以部署 ResultReceiver 或 LocalBroadcast。Service 可以完成繁重的工作并通过 metioned 方法发送结果来与 Activity 交互。您可以在 Activity 的生命周期的 onStart 和 onStop 方法上将 Activity 连接到服务,以确定 Activity 是否在前台,并相应地更新 UI。

希望能帮助到你。

注意:根据我的个人经验,我与两者都合作过,他们做得很好。我不建议绑定到服务,因为它给 Activity 带来了复杂性。

于 2013-04-24T21:03:01.633 回答