2009-08-09 53 views
4

所以,我讀過了Android AIDL文件,並且具有RPC如何工作的活動和服務之間的總體思路。然而,對於我的應用程序來說,實現這些功能似乎太過分了:基本上,我想傳遞一個很好的處理程序,以便它的線程可以將數據傳遞給我的活動。目前我通過使用靜態公共成員(黑客)來解決這個問題,但我更願意只是在Service的啓動Intent中傳遞Handler對象。例如。我可以很容易地在創建時傳遞整數到我的服務:安卓:傳遞一個服務處理器

int x = 0; 
Intent svc = new Intent(this, MyService.class); 
svc.putExtra("x",x); 
startService(svc); 

但是由於處理器沒有序列化,能,我還沒有找到一種方法把它傳遞給服務,而不簡單的靜態成員破解。任何見解?或者,我只需要將其吸收併爲該服務執行正式的RPC?

回答

4

如果你的服務和活動都在同一過程中,你可以從你的服務傳遞一個活頁夾沒有做複雜的RPC的東西:你的活動

public class MyEasyButNotGoodPracticesBinder { 
    public void gimmeHandler(Handler handler) { 
     // you got it! 
    } 
} 

IBinder mBinder = new MyEasyButNotGoodPracticesBinder(); 

public IBinder onBind(Intent intent) { 
    return mBinder; 
} 

然後,當你得到的IBinder對象只投它到MyEasyButNotGoodPracticesBinder並調用gimmeHandler(Handler)方法。現在,我認爲這是不好的做法,因爲如果您希望將您的服務放在單獨的進程中,以防崩潰時整個進程崩潰,則會中斷。我不認爲這是未來的證明。但它確實有效。

一個AIDL接口並不那麼難 - 你可能只是想這樣做。

1

Android文檔建議一個信使工作,因爲在他們的遠程Messenger Service的樣品客戶端接口: Remote Messenger Service Sample

代碼示例可以在上面的鏈接中找到,沒必要在這裏重新發布我猜...

Regards, Michael