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章。