ANDROID 中UID與PID的作用與區別

出自:http://blog.csdn.net/wi__wi/article/details/51078029

ANDROID 中UID與PID的作用與區別

PID:爲Process Identifier, PID就是各進程的身份標識,程序一運行系統就會自動分配給進程一個獨一無二的PID。進程中止後PID被系統回收,可能會被繼續分配給新運行的程序,但是在android系統中一般不會把已經kill掉的進程ID重新分配給新的進程,新產生進程的進程號,一般比產生之前所有的進程號都要大。

UID:一般理解爲User Identifier,UID在linux中就是用戶的ID,表明時哪個用戶運行了這個程序,主要用於權限的管理。而在android 中又有所不同,因爲android爲單用戶系統,這時UID 便被賦予了新的使命,數據共享,爲了實現數據共享,android爲每個應用幾乎都分配了不同的UID,不像傳統的linux,每個用戶相同就爲之分配相同的UID。(當然這也就表明了一個問題,android只能時單用戶系統,在設計之初就被他們的工程師給閹割了多用戶),使之成了數據共享的工具。

因此在android中PID,和UID都是用來識別應用程序的身份的,但UID是爲了不同的程序來使用共享的數據。

Pid是進程ID,Uid是用戶ID,只是Android和計算機不一樣,計算機每個用戶都具有一個Uid,哪個用戶start的程序,這個程序的Uid就是那個用戶,而Android中每個程序都有一個Uid,默認情況下,Android會給每個程序分配一個普通級別互不相同的 Uid,如果用互相調用,只能是Uid相同才行,這就使得共享數據具有了一定安全性,每個軟件之間是不能隨意獲得數據的。而同一個application 只有一個Uid,所以application下的Activity之間不存在訪問權限的問題。

pid 是process 進程id , uid 是user 用戶id;如果是root,那麼你的uid就是0,0爲最高權限;

可以通過pid找到這個進程的uid,沒有試過通過Uid找到所有Pid,大家可以試一下;每一個不同的程序都能有一個UId,但是一個應用裏面可以有多個PId;一個用戶可以打開多個進程(Pid),並且這些進程的uid是一樣的;一個pid對應一個進程,每次打開時系統都會賦予不同的pid,但是uid是當你安裝Apk時,系統賦予的,是不變的,除非你卸載了重裝,又會賦予一個Uid;

Tid(thead id)可以理解爲線程的Id,這個更容易理解

在android 中要通過UID共享數據只需在程序a,b中的menifest配置即可,具體如下:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.perseus.a"
      android:versionCode="1"
      android:versionName="1.0"
          android:sharedUserId="com.share"
>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.perseus.b"
      android:versionCode="1"
      android:versionName="1.0"
          android:sharedUserId="com.share"
>

這樣我們就可以在a程序中通過跳轉activity的形式訪問b中的數據了。

   這樣的話你也許會有疑問,如果讓其他的開發這知道了我們的shareUserId知道了我們的ID,那我們的數據不是暴露了,放心吧google不會犯這樣的低級錯誤的,我們要使不同的程序能夠相互訪問,還需要擁有相同的簽名,每個公司或者開發者的簽名是唯一的,這樣我們就不用擔心了,另外兩者能夠訪問,別忘了權限

http://www.cnblogs.com/perseus/articles/2354173.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章