1. 程式人生 > >ANDROID 中UID與PID的作用與區別

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