1. 程式人生 > 其它 >17.程序相關

17.程序相關

1. android中程序的優先順序?

1. 前臺程序:

即與使用者正在互動的Activity或者Activity用到的Service等,如果系統記憶體不足時前臺程序是最晚被殺死的

2. 可見程序:

可以是處於暫停狀態(onPause)的Activity或者繫結在其上的Service,即被使用者可見,但由於失了焦點而不能與使用者互動

3. 服務程序:

其中執行著使用startService方法啟動的Service,雖然不被使用者可見,但是卻是使用者關心的,例如使用者正在非音樂介面聽的音樂或者正在非下載頁面下載的檔案等;當系統要空間執行,前兩者程序才會被終止

4. 後臺程序:

其中執行著執行onStop方法而停止的程式,但是卻不是使用者當前關心的,例如後臺掛著的QQ,這時的程序系統一旦沒了有記憶體就首先被殺死

5. 空程序:

不包含任何應用程式的程序,這樣的程序系統是一般不會讓他存在的

2. 多程序場景遇見過麼?

1、在新的程序中,啟動前臺Service,播放音樂。 2、一個成熟的應用一定是多模組化的。首先多程序開發能為應用解決了OOM問題,因為Android對記憶體的限制是針對於程序的,所以,當我們需要載入大圖之類的操作,可以在新的程序中去執行,避免主程序OOM。而且假如圖片瀏覽程序打開了一個過大的圖片,java heap 申請記憶體失敗,該程序崩潰並不影響我主程序的使用。

3. Android中跨程序通訊的幾種方式

1:訪問其他應用程式的Activity 如呼叫系統通話應用

Intent callIntent = new Intent(Intent.ACTION_CALL,Uri.parse("tel:12345678");
startActivity(callIntent);
<span class="copy-code-btn">&#x590D;&#x5236;&#x4EE3;&#x7801;</span>

2:Content Provider 如訪問系統相簿

3:廣播(Broadcast) 如顯示系統時間

4:AIDL服務

4. Andorid 程序分類

Android 中,同一個應用的所有元件在預設情況下都執行在同一個程序中,但也可以通過修改 manifest 檔案中的 android:process 屬性來指定該元件要執行中那個程序,也可以讓不同應用的元件們執行在同一個程序中,當然這些應用要共享一個使用者 ID 並並且有相同的數字證書。

Android 可能在某個時刻決定關閉一個程序,當決定要關閉那些程序的時候,系統會衡量每個程序與使用者的緊密程度,這時候就跟 Android 中程序的級別有關了。像一個具有可見的activity 的程序要比那些 activity 都是不可見的程序擁有更高的等級,更不容易被系統殺死。

1、前臺程序

使用者當前正在做的事情需要這個程序。如果滿足下面的條件之一,一個程序就被認為是前臺程序:

這個程序擁有一個正在與使用者互動的 Activity(這個 Activity 的 onResume()方法被呼叫)。

這個程序擁有一個繫結到正在與使用者互動的 activity 上的 Service。

這個程序擁有一個前臺執行的 Service(service 呼叫了方法 startForeground()).

這個進 程擁有一個正 在執行其 任何一個生命 週期回撥 方法( onCreate(),onStart(),或onDestroy())的 Service。

這個程序擁有正在執行其 onReceive()方法的 BroadcastReceiver。

通常,在任何時間點,只有很少的前臺程序存在。它們只有在達到無法調合的矛盾時才會被殺--如記憶體太小而不能繼續執行時。通常,到了這時,裝置就達到了一個記憶體分頁排程狀態,所以需要殺一些前臺程序來保證使用者介面的反應

2、可見程序

一個程序不擁有運行於前臺的元件,但是依然能影響使用者所見。滿足下列條件時,程序即為可見:

這個程序擁有一個不在前臺但仍可見的 Activity(它的 onPause()方法被呼叫)。當一個前臺activity 啟動一個對話方塊時,就出了這種情況。

3、服務程序

一個可見程序被認為是極其重要的。並且,除非只有殺掉它才可以保證所有前臺程序的執行,否則是不能動它的。

這個程序擁有一個繫結到可見 activity 的 Service。

一個程序不在上述兩種之內,但它執行著一個被 startService()所啟動的 service。

儘管一個服務程序不直接影響使用者所見,但是它們通常做一些使用者關心的事情(比如播放音樂或下載資料),所以系統不到前臺程序和可見程序活不下去時不會殺它。

4、後臺程序

一個程序擁有一個當前不可見的 activity(activity 的 onStop()方法被呼叫)。

這樣的程序們不會直接影響到使用者體驗,所以系統可以在任意時刻殺了它們從而為前臺、可見、以及服務程序們提供儲存空間。通常有很多後臺程序在執行。它們被儲存在一個 LRU(最近最少使用)列表中來確保擁有最近剛被看到的 activity 的程序最後被殺。如果一個 activity正確的實現了它的生命週期方法,並儲存了它的當前狀態,那麼殺死它的程序將不會對使用者的視覺化體驗造成影響。因為當用戶返回到這個 activity 時,這個 activity 會恢復它所有的可見狀態。

5、空程序

一個程序不擁有入何 active 元件。

保留這類程序的唯一理由是快取記憶體,這樣可以提高下一次一個元件要執行它時的啟動速度。系統經常為了平衡在程序快取記憶體和底層的核心快取記憶體之間的整體系統資源而殺死它們。

https://www.cnblogs.com/jiuguimianju/p/4162102.html

5. 什麼要用多程序?有哪些方式?怎麼使用多程序

【參考】那麼多程序應該能為我們帶來什麼呢?

我們都知道,android 平臺對應用都有記憶體限制,其實這個理解有點問題,應該是說 android平臺對每個程序有記憶體限制,比如某機型對對程序限制是 24m,如果應用有兩個程序,則該應該的總記憶體限制是 2*24m。使用多程序就可以使得我們一個 apk 所使用的記憶體限制加大幾倍。所以可以藉此圖片平臺對應用的記憶體限制,比如一些要對圖片、視訊、大檔案程序處理的好,記憶體的應用可以考慮用多程序來解決應用操作不流暢問題。

開啟多程序模式: 在 Android 中 使 用多 程序 只 有 一 種方 法,那 就是 在 AndroidManifest 中 給 四 大 元件(Activity,Service,Receiver,ContentProvider)指定 android:process 屬性.除此之外沒有其他的辦法,也就是說我們無法給一個執行緒活一個實體類指定其執行時所在的程序.其實還有另一種非常規的多程序方法,那就是通過 JNI 在 native 層去 fork 一個新的程序,但這種方法屬於特殊情況,並不是常用的建立多程序的方式,所以我們也暫不考慮這種情況程序名以":"開頭的程序屬於當前應用的私有程序,其他應用的元件不可以和它跑在同一個程序中,而程序名不以":"開頭的程序屬於全域性程序,其他應用通過 ShareUID 方式可以和它跑在同一個程序中.用多程序的好處與壞處

好處:

1)分擔主程序的記憶體壓力。

當應用越做越大,記憶體越來越多,將一些獨立的元件放到不同的程序,它就不佔用主程序的記憶體空間了。當然還有其他好處,有心人會發現

2)使應用常駐後臺,防止主程序被殺守護程序,守護程序和主程序之間相互監視,有一方被殺就重新啟動它。Android 後臺程序裡有很多應用是多個程序的,因為它們要常駐後臺,特別是即時通訊或者社交應用,不過現在多程序已經被用爛了。

典型用法是在啟動一個不可見的輕量級私有程序,在後臺收發訊息,或者做一些耗時的事情,或者開機啟動這個程序,然後做監聽等。

壞處:消耗使用者的電量。

多佔用了系統的空間,若所有應用都這樣佔用,系統記憶體很容易佔滿而導致卡頓。應用程式架構會變得複雜,因為要處理多程序之間的通訊。這裡又是另外一個問題了。

多程序的缺陷程序間的記憶體空間是不可見的。開啟多程序後,會引發以下問題:

1)Application 的多次重建。

2)靜態成員的失效。

3)檔案共享問題。

4)斷點除錯問題。

https://blog.csdn.net/spencer_hale/article/details/54968092

https://blog.csdn.net/u010019468/article/details/72782098

6. 看你簡歷上寫熟悉 AIDL ,說一說 oneway 吧