一、 經過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,這部份內容下次再單獨介紹