0

经过一整夜的测试(没有任何运气),我的界面需要一些支持。我直接在 Android 框架上工作,我创建了一个类,它作为一个带有 WeakHashMap 的 Binder 来控制回调。

这是代码:

我的回调:

public interface MyCallback {

    public void fire();
} 

我的活页夹:

public static WeakHashMap<String, MyCallback> mCallbacks =
    new WeakHashMap<String, MyCallback>();

public static void setup(MyCallback callback) {
    if(mCallbacks.get(callback.getClass().getName()) == null) {
        mCallbacks.put(callback.getClass().getName(), callback);
    }
}

public static void letsgo() {
    Log.d("size", " " + mCallbacks.size()); // IMPORTANT
    for (MyCallback cb : mCallbacks.values()) {
        cb.fire();
    }
}

这 2 个类被写入框架,所以我用一个实现我的接口的简单类创建了 2 个测试应用程序:

public class FirstApp implements MyCallback {
    public FirstApp() {
        MyBinder.setup(this);
    }

    @Override
    public void fire() {
        Log.d("app1", "fired");
    }
}

public class SecondApp implements MyCallback {
    public SecondApp() {
        MyBinder.setup(this);
    }

    @Override
    public void fire() {
        Log.d("app2", "fired");
    }
}

好的,此时我又做了一个类(所有这3个类,所以实现接口的2个和下面的一个被写到不同的包中)

在这第三堂课中,我只是调用: MyBinder.letsgo();

我面临的问题,以及我试图解决的问题...... 8/9 小时是:如果我在第三个包上运行letsgo(),则回调WeakHashMap 大小的日志显示为0。如果我在第二个包上运行letsgo()它可以工作,但它只会触发同一个包中的回调。如果我在第一个包上运行它也是一样的。

我也尝试使用 HashMap 而不是 WeakHashMap,因为我认为必须引用对象但没有任何运气。我想知道是否有人可以帮助我让我去睡觉 :D 谢谢!

4

0 回答 0