一、 经过Context.getSharedPreferences(String fileName,int mode)方法,能够打开一个xml文件,文件的位置在/data/data/package_name/shared_prefs/fileName.xml,若是不存在,则会自动建立。能够对该文件进行读写操做,在应用内的各组件之间共享数据。若是将mode设置为Context.MODE_WORLD_READ或者Context.MODE_WORLD_WRITE,则还能够被其余应用访问到。不过这不是android推荐的方式,要实现跨应用共享数据,推荐的方式是用ContentProvider实现 java
二、 若是要访问另外一个应用建立的shared_prefs文件,须要知足2个条件,首先另外一个应用要设置MODE_WORLD_READ或MODE_WORLD_WIRTE权限,而且要知道另外一个应用的package_name,而后就能够经过Context.createPackageContext()方法,就能够获得另外一个应用的context,而后context.getSharedPreferences()方法,就能够打开shared_prefs文件了。不过这种方法并不推荐
三、 在罕见的状况下,若是既把shared_prefs的权限设置为MODE_PRIVATE,又但愿某些其余的应用能够访问到,那么能够在manifest文件中配置android:user_id(好像是这个属性),让多个应用共享USER_ID。由于本质上shared_prefs文件是采用linux的权限控制的,MODE_PRIVATE相似于-rw-------,因此若是多个应用使用了同一个USER_ID,天然都对这个文件有访问权限了
四、 除了比较方便的shared_prefs,也能够建立自定义文件,方法是Context.openFileOutput(),能够在/data/data/package_name/files/目录下建立指定的文件,除此之外,和上面提到的shared_prefs都同样。不过操做起来就复杂一些了。要读取用这种方式建立的文件,能够用Context.openFileInput()方法
五、 此外,还能够在SD卡上操做文件,经过标准的java.io包内的API就能够。不过要注意的是,SD卡内采用的是FAT文件系统,因此不支持linux的文件读写权限控制,这点和shared_prefs与file不太同样。若是须要对文件进行读写权限控制,就不能采用写入SD卡的方式
六、 也能够用android自带的SQLite数据库来作数据持久化,主要用到的类包括SQLiteOpenHelper和SQLiteDatabase。 linux
SQLiteOpenHelper主要有onCreate()、onUpgrade()、getWritableDatabase()等方法。getWritableDatabase()方法返回的是SQLiteDatabase对象实例,若是数据库还没有建立,则会自动调用onCreate()方法来建立数据库,因此一些建表和数据初始化操做,应该放在onCreate()方法里
SQLiteDatabase这个类至关于JDBC中的Connection,也相似Hibernate中的Session,或者Spring中的HibernateTemplate。该对象已经对基本的数据库操做进行了封装。能够调用insert()、delete()、executeSQL()等方法,进行实际的数据库操做
开发的时候通常会对这2个类作一下包装,好比进行简单的封装,使SQLiteDatabase的查询方法不是返回原始的Cursor类(Cursor至关于JDBC中的ResultSet),而是返回业务对象等等
七、 android中要实现跨应用共享数据,规范的方式是使用ContentProvider,使其余应用能够获得某个应用对外提供的数据,而不须要知道这个应用的实现细节。系统自带的provider放在android.provider包下,好比通信录等。若是须要的话,开发者也能够提供本身的ContentProvider,这部份内容下次再单独介绍