Android中的Serializable、Parcelable">Android中的Serializable、Parcelable
1488
2022-05-29
android:sharedUserId
當APK安裝的時候,userid這個標志就會產生。APK在設備上的整個生命周期中,這個ID不再改變。不同設備上同一個應用包可能有不同的userid,重要的是在給定的設備上,每個應用包有自己獨立的userid。
userid的特點:
1. 作為APK身份的標識 2. userid對應一個Linux用戶,所以不同APK(用戶)間互相訪問數據默認是禁止的.
那么不同APK之間想要互相訪問數據應該怎么辦呢?
Android為我們提供了兩種數據互訪的方法:
一是使用Share Preference. / Content Provider
APK通過指定接口和數據供其它APK讀取,開發者需要實現接口和指定share的數據。【此方法后面再詳細講解】
二是在配置文件manifest中配置相同的UserId
通過共享userid,擁有相同userid的用戶可以配置成運行在同一進程當中,因此默認就是可以互相訪問任意數據的
也可以配置為不同進程當中,彼此之間就像訪問自己的數據一樣訪問彼此的數據庫和文件。
例子:
應用程序1:com.wirelessqa.sqlite
應用程序2:com.wirelessqa.activity
這兩個應用程序的userid相同,都為wirelessqa.com,因此兩個應用程序共享userid,如果1想訪問2的數據怎么辦呢?
Content content = this.createPackageContent(“com.wirelessqa.activity”,Content.CONTENT_IGNORE_SECURITY);
這樣通過content可以獲取到應用2中的資源,包括:數據庫,preference,資源文件等等
注意:
基于安全考慮,兩個package需要有相同的簽名,否則沒有驗證,應用程序一旦設置了shareuserid,當程序被破解,其它應用也可以訪問我們的數據,數據不安全設置共享也就沒有多大意義了。
總結:
如果想要不同的APK之間共享數據需要滿足以下條件:
1.APK的簽名必須相同
2.android:shareUserId的值必須相同
3.如果想要運行在同一個進行當中,必須設置android:process的值相同。
application設置應用程序的全部組件都運行在某個線程中
view source
android:sharedUserLabel
這個屬性給共享的userid定義了一個用戶可讀的標簽。這個標簽必須用字符串資源來設置,不能使用原生的字符串。
這個屬性在API Level 3中被引入,只有在sharedUserId屬性被設置,這個屬性才有意義。
Android
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。