Android系統匿名共享記憶體Ashmem(Anonymous Shared Memory)簡要介紹和學習計劃 (五)

broadviewbj發表於2012-10-31
內部函式getMemoryService用來獲取IMemoryService。如果是第一次呼叫該函式,則會透過ServiceManager的getService介面來獲得這個IMemoryService介面,然後儲存在類成員變數memoryService中,以後再呼叫這個函式時,就可以直接返回memoryService了。

        內部函式getMemoryFile用來從MemoryService中獲得匿名共享記憶體檔案的描述符。同樣,如果是第一次呼叫該函式,則會透過IMemoryService的getFileDescriptor介面來獲得MemoryService中的匿名共享記憶體檔案的描述符,然後用這個檔案描述符來建立一個MemoryFile例項,並儲存在類成員變數memoryFile中,以後再呼叫這個函式時,就可以直接返回memoryFile了。

        有了memoryService和memoryFile後,我們就可以在Client端訪問Server端建立的匿名共享記憶體了。點選Read按鈕時,就透過memoryFile的readBytes介面把共享記憶體中的整數讀出來,並顯示在文字框中;點選Write按鈕時,就透過memoryService這個代理類的setVal介面來呼叫MemoryService的本地實現類的setVal服務,從而把文字框中的數值寫到Server端建立的匿名共享記憶體中去;點選Clear按鈕時,就會清空文字框的內容。這樣,我們就可以透過Read和Write按鈕來驗證我們是否在Client和Server兩個程式中實現記憶體共享了。

       現在,我們再來看看Client介面的配置檔案,它定義在res/layout/main.xml檔案中:

  1. xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android=""  
  3.     android:orientation="vertical"  
  4.     android:layout_width="fill_parent"  
  5.     android:layout_height="fill_parent"  
  6.     >  
  7.     <LinearLayout  
  8.         android:layout_width="fill_parent"  
  9.         android:layout_height="wrap_content"  
  10.         android:orientation="vertical"   
  11.         android:gravity="center">  
  12.         <TextView   
  13.             android:layout_width="wrap_content"  
  14.             android:layout_height="wrap_content"   
  15.             android:text="@string/value">  
  16.         TextView>  
  17.         <EditText   
  18.             android:layout_width="fill_parent"  
  19.             android:layout_height="wrap_content"   
  20.             android:id="@+id/edit_value"  
  21.             android:hint="@string/hint">  
  22.         EditText>  
  23.     LinearLayout>  
  24.      <LinearLayout  
  25.         android:layout_width="fill_parent"  
  26.         android:layout_height="wrap_content"  
  27.         android:orientation="horizontal"   
  28.         android:gravity="center">  
  29.         <Button   
  30.             android:id="@+id/button_read"  
  31.             android:layout_width="wrap_content"  
  32.             android:layout_height="wrap_content"  
  33.             android:text="@string/read">  
  34.         Button>  
  35.         <Button   
  36.             android:id="@+id/button_write"  
  37.             android:layout_width="wrap_content"  
  38.             android:layout_height="wrap_content"  
  39.             android:text="@string/write">  
  40.         Button>  
  41.         <Button   
  42.             android:id="@+id/button_clear"  
  43.             android:layout_width="wrap_content"  
  44.             android:layout_height="wrap_content"  
  45.             android:text="@string/clear">  
  46.         Button>  
  47.     LinearLayout>  
  48. LinearLayout>  
  1. xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android=""  
  3.     android:orientation="vertical"  
  4.     android:layout_width="fill_parent"  
  5.     android:layout_height="fill_parent"  
  6.     >  
  7.     <LinearLayout  
  8.         android:layout_width="fill_parent"  
  9.         android:layout_height="wrap_content"  
  10.         android:orientation="vertical"   
  11.         android:gravity="center">  
  12.         <TextView   
  13.             android:layout_width="wrap_content"  
  14.             android:layout_height="wrap_content"   
  15.             android:text="@string/value">  
  16.         TextView>  
  17.         <EditText   
  18.             android:layout_width="fill_parent"  
  19.             android:layout_height="wrap_content"   
  20.             android:id="@+id/edit_value"  
  21.             android:hint="@string/hint">  
  22.         EditText>  
  23.     LinearLayout>  
  24.      <LinearLayout  
  25.         android:layout_width="fill_parent"  
  26.         android:layout_height="wrap_content"  
  27.         android:orientation="horizontal"   
  28.         android:gravity="center">  
  29.         <Button   
  30.             android:id="@+id/button_read"  
  31.             android:layout_width="wrap_content"  
  32.             android:layout_height="wrap_content"  
  33.             android:text="@string/read">  
  34.         Button>  
  35.         <Button   
  36.             android:id="@+id/button_write"  
  37.             android:layout_width="wrap_content"  
  38.             android:layout_height="wrap_content"  
  39.             android:text="@string/write">  
  40.         Button>  
  41.         <Button   
  42.             android:id="@+id/button_clear"  
  43.             android:layout_width="wrap_content"  
  44.             android:layout_height="wrap_content"  
  45.             android:text="@string/clear">  
  46.         Button>  
  47.     LinearLayout>  
  48. LinearLayout>  

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/13164110/viewspace-747975/,如需轉載,請註明出處,否則將追究法律責任。

相關文章