天天看點

android 元件 :process 标簽簡析

前言

最近遇到一個關于程序問題,這裡進行說明一下遇到的問題,項目中需要開啟服務進行具體裝置資訊抓取,然後回傳給後端,進行統計。不料 start server ()之後,界面直接卡死。具體原因是什麼?

系統線程和程序關系沒了解清楚。

清單檔案服務聲明方式:

<service android:name=".xxxxService" />

     <service android:name=".xxxxxService" />      

呃,是不是少了什麼?

修改後聲明方式 增加了android:process 标簽

<service
            android:name=".xxxService"
            android:process="com.demo.s1" />
        <service
            android:name=".d.UploadPbService"
            android:process="com.demo.s" />      

注意: android:process 聲明一個獨立程序,預設和application共享同一程序。

Android Service元件的過程中碰到了一個問題,就是在Android應用的聲明檔案Manifest.xml中有時候會對相關的服務标簽設定一個android:process=”:remote”,這個屬性有什麼作用呢?

在Android的幫助文檔中我們可以了解到,一般情況下一個服務沒有自己獨立的程序,它一般是作為一個線程運作于它所在的應用的程序中。但是也有例外,Android聲明檔案中的android:process屬性卻可以為任意元件包括應用指定程序,換句話說,通過在聲明檔案中設定android:process屬性.

我們可以讓元件(例如Activity, Service等)和應用(Application)建立并運作于我們指定的程序中。下面是相關資料。

Android:關于聲明檔案中android:process屬性說明

android 元件 :process 标簽簡析

如果我們需要讓一個服務在一個遠端程序中運作(而不是标準的它所在的apk的程序中運作),我們可以在聲明檔案中這個服務的标簽中通過android:process屬性為其指定一個程序。

注意:這裡選擇”remote”這個名字是随意主觀的,你能用其他名字來讓這個服務在另外的程序中運作。

冒号“:”這個字首将把這個名字附加到你的包所運作的标準程序名字的後面作為新的程序名稱。

例如:一個應用的包名為com.demo.example, 則本例中服務将運作的新程序的名稱為com.demo.example:remote.(注意,如果聲明檔案中的元件或者應用沒有指定這個屬性則預設應用和其元件将相應運作在以其包名命名的程序中).

Android:關于聲明檔案中android:process屬性說明

android:process

服務所在程序的名字。通常,一個應用的所有元件都運作在系統為這個應用所建立的預設程序中。這個預設程序是用這個應用的包名來命名的。

android 元件 :process 标簽簡析

标簽的process屬性可以設定成和所有元件都不同的預設值。但是這些元件可以通過設定自己的process值來覆寫這個預設值,這樣可以讓你的應用跨多程序運作。

如果被設定的程序名是以一個冒号開頭的,則這個新的程序對于這個應用來說是私有的,當它被需要或者這個服務需要在新程序中運作的時候,這個新程序将會被建立。如果這個程序的名字是以小寫字元開頭的,則這個服務将運作在一個以這個名字命名的全局的程序中,當然前提是它有相應的權限。這将允許在不同應用中的各種元件可以共享一個程序,進而減少資源的占用。