6.2 利用文件进行数据共享

在很多场景下,多个组件对象都需要读写同一份数据,比如,应用的设置数据、历史记录等。为了在多个组件对象间共享数据,一个自然而然的想法就是基于文件的数据共享。

6.2.1 利用文件进行数据共享的实现

使用文件进行数据的共享,最重要的是要保证数据的一致性,使不同的组件可以读写到相同的数据。在Android中,处于前台状态的组件对象仅有一个,抓住这个特性,可以方便地维持数据的一致性。

因此,在开发中,通常会在组件切换至前台时,从文件系统中读取数据;而当组件切换到后台时,再将内存中修改过的数据存入文件中。比如,在邮箱应用中,通常需要维护一份“最近使用联系人”的列表,帮助用户快速找到他需要联系的人。该列表需要在写邮件、读邮件等多个界面组件中进行读取或修改,因此,可以通过文件在组件间共享该列表数据:


public static final String RECENT_CONTACTS="contacts.data";

protected void onResume(){

super.onResume();

//打开文件,准备读取

FileInputStream input=openFileInput(RECENT_CONTACTS);

//从文件中读取联系人数据

String[]contacts=readContactsFromFile(input);

}

protected void onPause(){

super.onPause();

//打开文件,准备写入

FileOutputStream output=openFileOutput(RECENT_CONTACTS,

MODE_PRIVATE);

//把联系人数据写入文件

String[]contacts=getContacts();

writeContactsIntoFile(contacts, output);

}


通过Context.openFileOutput等函数创建的文件,都是应用的私有文件,存储在应用下的files子目录中,只有本应用的组件才可以进行读取或写入,只能作为本应用组件间共享数据的载体。

如果期望在不同的应用组件中共享数据,就需要将数据存放到SD卡等扩展外存储设备上,在Android中,各个组件对象可以对这些文件进行读取或写入[1]

[1]更多关于Android的文件系统、文件读写等相关内容,可以参见本书的第9章。