经过一整夜的测试(没有任何运气),我的界面需要一些支持。我直接在 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 谢谢!