1. 程式人生 > >android面試題-與IPC機制相關面試題

android面試題-與IPC機制相關面試題

現在三四月份,金三銀四最好找工作時間,為方便各位找工作,特意收集100道android各個方面的面試題,並且會一一錄製視訊分享給大家方便大家找工作,面試題分類如下;

  • 歡迎關注微信公眾號,長期推薦技術文章和技術視訊

1- Davik程序、linux程序、執行緒之間的區別?

Linux程序:

  • Linux程序,它有獨立的核心堆疊和獨立的儲存空間,它是作業系統中資源分配和排程的最小單位。

  • Linux作業系統會以程序為單位,分配系統資源,給程式進行排程。

  • Linux作業系統在執行一個程式時,它會建立一個程序,來執行應用程式,並且伴隨著資源的分配和釋放。

Davik程序:

  • Dalvik虛擬機器執行在Linux作業系統之上。
  • Davik程序就是Linux作業系統中的一個程序,屬於linux程序
  • 每個Android應用程式程序都有一個Dalvik虛擬機器例項。這樣做得好處是Android應用程式程序之間不會互相影響,也就是說,一個Android應用程式程序的意外終止,不會影響到其他的應用程式程序的正常執行。

執行緒:

  • 執行緒是程序的一個實體,是CPU排程和分派的基本單位,它是比程序更小的能獨立執行的基本單位。
  • 執行緒自己基本上不擁有系統資源,在執行時,只需要必不可少的資源(如程式計數器,一組暫存器和棧)。
  • 執行緒與同屬一個程序的其他的執行緒共享程序所擁有的全部資源。

三者之間的聯絡:

  • Davik程序就是Linux作業系統的一個程序。
  • 執行緒就是程序的一個實體,執行緒是程序的一部分。一個程序中可以提供多個執行緒執行控制。

程序和執行緒的區別:

1) 一個程式至少有一個程序,一個程序至少有一個執行緒.

2) 執行緒的劃分尺度小於程序,使得多執行緒程式的併發性高。

3) 程序在執行過程中擁有獨立的記憶體單元,而多個執行緒共享記憶體(同屬一個程序),從而極大地提高了程式的執行效率。

4) 每個獨立的程序有一個程式執行的入口、順序執行序列和程式的出口。但是執行緒不能夠獨立執行,必須依存在應用程式中,由應用程式提供多個執行緒執行控制。

5) 從邏輯角度來看,多執行緒的意義在於一個應用程式中,有多個執行部分可以同時執行。但作業系統並沒有將多個執行緒看做多個獨立的應用,來實現程序的排程和管理以及資源分配。這就是程序和執行緒的重要區別。

2-Android 中程序與程序之間如何通訊?

aidl機制程序間通訊
AIDL: (Android Interface definition language的縮寫)它是一種android內部程序通訊介面的描述語言,通過它我們可以定義程序間的通訊介面

AIDL程序間通訊的原理:
通過編寫aidl檔案來定義程序間通訊介面。
編譯後會自動生成響應的java檔案
伺服器將介面的具體實現寫在Stub中,用iBinder物件傳遞給客戶端,
客戶端bindService的時候,用asInterface的形式將iBinder還原成介面,再呼叫其介面中的方法來實現通訊。

使用Messenger實現程序間通訊

Messenger是基於AIDL實現的。
AIDL使伺服器可以並行處理,而Messenger封裝了AIDL之後只能序列執行,所以Messenger一般用作訊息傳遞。

  • 需要大家注意:
  • 區別Messenger和Message。
  • 1) Message是訊息,承載了要傳遞的資料。
  • 2) Messenger是信使,可以傳送訊息。並且Messenger物件可以通過getBinder方法獲取一個Ibinder物件。

Messenger實現原理:

服務端(被動方)提供一個Service來處理客戶端(主動方)連線,維護一個Handler來建立Messenger,在onBind時返回Messenger的binder。
雙方用Messenger來發送資料,用Handler來處理資料。Messenger處理資料依靠Handler,所以是序列的,也就是說,Handler接到多個message時,就要排隊依次處理。

使用Messenger實現程序間通訊方法如下:

  • 首先A應用提供一個Service,建立一個Messenger物件,在onBinder方法裡返回messenger.getBinder()生成的IBinder物件;
    然後在B應用繫結該Service,在ServiceConnection的onServiceConnected方法獲取到IBinder物件;
  • 最後在B應用使用獲取到的binder物件構造出一個新的Messenger物件,使用該Messenger物件的send方法傳送的Message資料,都將被Service裡的Messenger物件handlerMessage方法接收到。

內容提供者ContentProvider實現程序間通訊

  • 配套視訊
    系統四大元件之一,底層也是Binder實現,主要用來為其他APP提供資料。

自定義的ContentProvider為外界程序訪問的時候,
需要在註冊時要提供authorities屬性,應用需要訪問的時候將屬性包裝成Uri.parse(“content://authorities”)。

  • 然後實現:
    ContentProvider的中query,delete,insert等相關方法,進行資料的操作。