Android多程序使用及其帶來的問題

2021-08-22 12:12:00 字數 1264 閱讀 9210

注:android程序掛了,不會影響到另乙個已經開啟的程序。

本文介紹android程式如何使用多程序,為什麼要使用多程序,並說明了使用多程序可能會出現的一些問題。

根據processes and threads,預設情況下,乙個android程式的所有元件都是在乙個程序中執行的,該程序的名字就是程式的包名。同時,android也允許開發者將程式的一些元件在其他程序中執行。四大元件均支援android:process屬性,我們可以設定該屬性的名字,將元件執行在指定的程序。參考以下的例子,

在該例子中,我們將secactivity的android:process屬性設定為」:secactivity」(暫時忽略「:」的意思,稍後介紹),啟動程式,開啟secactivity,然後進入adb shell,執行ps命令,檢視當前正在執行的程序資訊,

由上圖可以看到,的確由兩個程序在執行,其中乙個的名字是paul.example.mutliprocessdemo,這正是我們的包名,也就是說,這個就是我們的主程序。另乙個的名字是paul.example.mutliprocessdemo:secactivity,這是我們在manifest檔案中設定」:secactivity」的結果。

接下來來介紹「:」的含義,如果乙個元件指定的程序名是以「:」開頭的,就意味著該程序是乙個私有程序。那麼何為私有程序?私有程序是和全域性程序對應,如果我們在android:process中填寫的是完整的包名,那麼該程序就是乙個全域性程序。全域性程序允許兩個不同的應用(或元件)執行在同乙個程序中(使用shareuid,且簽名完全一致);私有程序則不可以。

為什麼android應用要使用多程序?有以下理由,歡迎各位讀者補充~ 

1. 更大的記憶體分配,我們知道,android裝置限制了每乙個程序所分配的記憶體大小,如果這個大小是32m,那麼如果我們的應用有兩個程序,那麼所能使用的最大記憶體就是32*2=64m。所以如果使用者經常收到outofmemory異常,那麼就應該考慮使用多程序。

3. 分擔主程序的記憶體壓力。現在的應用越來越大,我們可以將一些其他的工作放在額外的程序中執行,來降低主程序的壓力。

我們知道,在android裝置上,乙個程序對應乙個虛擬機器例項。而不同的虛擬機器之間是相互隔離的,也就意味著,我們不能使用常規方法來共享資料。

但是,這並不意味著兩個程序之間無法通訊。事實上,有一些方法可以實現程序間通訊。比如,intent,handler,messenger,aidl或者binder。

另外,多程序還會帶來以下問題,

Android 應用實現多程序

android service 跨程序實現 同乙個應用程式中實現多個程序通訊 通訊機制 使用aidl通訊 具體步驟 1 新建aidl檔案 例 iclickaidlinte ce.aidl inte ce iclickaidlinte ce 以上步驟,如果沒有差錯,重新編譯,會自動生成乙個 iclic...

android 多程序程式設計 必看!

關於程序的基礎概念不再贅述 首先討論如果乙個程式內存在多個程序時建立順序 看如下 public static int test 0 override public void oncreate servicea在配置檔案裡標明了使用單獨程序 大家是不是覺得步驟是這樣,現實比想像嚴峻的多啊,先看看log...

多程序使用pthread mutex

pthread的mutex通常用在多執行緒的同步當中,至於多程序的同步,一直以為只能使用記錄鎖和訊號量,而這兩種機制都需要核心的支援,屬於 重量級 部件。也曾經在多程序同步中使用pthread mutex,但前提有兩個 mutex能為多個程序所見,使mutex物件駐留在共享記憶體中 mutex本身不...