繁体   English   中英

在活动和服务之间共享数据

[英]Sharing data amongst activities and services

我正在开发一个小型的android项目,需要在几个活动和一个单独进程中运行的服务之间共享一些数据。 我想知道在共享数据方面我有哪些选择? 申请类? IPC? 基于文件的? 广播? 多谢你们!

1。 听起来你需要广播一些信息。 您可以在任何您希望收到通知的活动/服务中设置广播接收器。

在线阅读有关Broadcastreceiver发送广播的更多信息

2。 如何在单个应用程序中的活动/服务之间传递数据?

这取决于您要共享的数据类型:

基元数据类型要在应用程序中的活动/服务之间共享基元数据,请使用Intent.putExtras()。 要传递需要持久化的原始数据,请使用“ 首选项”存储机制。

非持久对象为了在短时间内共享复杂的非持久性用户定义对象,建议采用以下方法:

android.app.Application类

android.app.Application是需要维护全局应用程序状态的人的基类。 它可以通过getApplication()从任何Activity或Service访问。 它有几个生命周期方法,如果您在AndroidManifest.xml中注册它,将自动由Android实例化。

公共静态字段/方法

使活动/服务可访问数据的另一种方法是使用公共静态字段和/或方法。 您可以从应用程序中的任何其他类访问这些静态字段。 要共享对象,创建对象的活动会将静态字段设置为指向此对象,而要使用此对象的任何其他活动只会访问此静态字段。

WeakReferences对象的HashMap

您还可以使用WeakReferences的HashMap到具有长键的对象。 当活动想要将对象传递给另一个活动时,它只是将对象放入地图中,并通过意图附加功能将密钥(基于计数器或时间戳的唯一Long)发送给收件人活动。 收件人活动使用此密钥检索对象。

Singleton类

使用静态Singleton有一些优点,例如你可以在不将getApplication()强制转换为特定于应用程序的类的情况下引用它们,或者在所有Application子类上挂起接口的麻烦,以便各种模块可以引用而是那个界面。

但是,静电的生命周期并不在你的控制之下; 为了遵守生命周期模型,应用程序类应该在Application类的onCreate()和onTerminate()方法中启动和拆除这些静态对象

持久对象即使应用程序似乎继续运行,系统也可以选择终止其进程并在以后重新启动它。 如果您需要将数据从一个活动调用持久存储到下一个活动,则需要将该数据表示为活动在被通知可能消失时保存的状态。

要共享复杂的持久性用户定义对象,建议采用以下方法:

Application Preferences
Files
contentProviders
SQLite DB

如果需要在可以杀死应用程序进程的点之间保留共享数据,则将该数据放在持久存储中,如“应用程序首选项”,“SQLite数据库”,“文件”或“内容提供者”。 有关如何使用这些组件的更多详细信息,请参阅数据存储

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM