android進程與線程詳解三:安全執行緒和處理序間通訊

來源:互聯網
上載者:User
安全執行緒

    在某些情況下,你實現的方法可能會在不同的線程中調用,所以它們必須被實現成“安全執行緒的”。

    這首先體現在可以遠程調用的方法上—比如在boundservice中的方法。當在一個進程中調用同一個進程中的IBinder上所實現的方法時,這個方法會在調用者的線程中運行(IBinder不理解的看這裡:http://blog.csdn.net/nkmnkm/article/details/6453218)。然而,當這個調用從另一個進程中發出時,方法會線上程池中某個被選出的線程中執行,這個線程在與IBinder相同的進程中(它不是運行於進程的介面線程中)。例如,儘管一個service的onBind()
方法在service所在進程的介面線程中調用,onBian()所返回的對象的方法(例如,一個子類所實現的那些RPC方法們)將線上程池的線程中調用。因為一個service可以擁有多個用戶端,某個時刻可能一個或多個池中線程被用於執行一個Ibinder的同一個方法。IBinder的方法們因此必須被實現為安全執行緒的。


    同樣的,一個內容提供者也可能收到來自不同線程的資料請求。儘管ContentResolver
和ContentProvider類隱藏了處理序間通訊的管理細節,ContentProvider的那些響應請求的方法們—query(),insert(),
delete(), update(), 和getType()—會被內容提供者所在的進程中的線程池中的線程調用,而不是被進程的介面線程調用。因為這些方法們可能在同一時刻被任意數量的線程調用,所以它們必須被實現為安全執行緒的。

處理序間通訊

    Android通過遠程調用(RPCs)提供了處理序間通訊(IPC)機制,於是一個方法可以被另一個應用的Activity調用,但是它卻遠程執行(在另一個進程中),而又把結果返回給調用者。這使得必須分解一個方法調用和它的資料到作業系統能理解的水平,把它們從本地進程和地址空間傳到遠程進程和地址空間,然後重組並重演調用過程。要返回的結果以相反的方向傳送。Android提供了所有的執行這些IPC傳輸的代碼,於是你可以專註於定義和實現RPC
程式介面。

 

    要執行IPC,你的應用必須綁定到一個service,使用方法bindService()。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.