2013-11-23 56 views
2

有一個AIDL接口如何區分元素?

interface ISimpleService { 
    void register(in ISomeCallback callback); 
    void deregister(in ISomeCallback callback); 
} 

回調定義這樣

interface ISomeCallback { 
    void notify(int event); 
} 

registerderegister實現回調放在LinkedBlockingQueue通過addremove方法。問題是具有通過AIDL傳遞的相同散列的同一個對象在AIDL(內部註冊和註銷方法)之後具有不同的散列,並且它被視爲不同的實例,以便永遠不會將該對象從隊列中刪除。

如何在移除過程中檢查對象是否與隊列中沒有添加鍵的對象相同(我在更改界面中受到限制)?

回答

1

您可以嘗試覆蓋ISomeCallback實現的hashCode()equals()方法。由此您可以決定哪些對象是相同的。

0

您可以使用來自Android api的RemoteCallbackList < ISomeCallback >來存儲您的回調。在你的榜樣,它會看起來像這樣:

public class SimpleService extends ISimpleService.Stub { 
    RemoteCallbackList<ISomeCallback> mLists = 
     new RemoteCallbackList<ISomeCallback>(); 
    ... 
    public void register(ISomeCallback callback) { 
     mLists.register(callback); 
    } 
    public void unregister(ISomeCallback callback) { 
     mLists.unregister(callback); 
    } 
} 

類已經是線程安全的,所以我認爲這會工作得上你的問題。請注意,它基於您的參考,而不是哈希碼。如果你使用散列碼傳遞不同的對象,它將不會被視爲同一個對象。

參考:http://developer.android.com/reference/android/os/RemoteCallbackList.html