一晩中テストに費やした後(運がなかった)、インターフェースのサポートが必要です。私は 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 つと次の 1 つが異なるパッケージに書き込まれます)。
この 3 番目のクラスでは、MyBinder.letsgo(); を呼び出すだけです。
私が直面している問題、およびそれ以来解決しようとしている問題は... 8/9 時間は次のとおりです。2番目のパッケージでletsgo()を実行すると機能しますが、同じパッケージでコールバックを起動するだけです。最初のパッケージで実行した場合も同じです。
WeakHashMap の代わりに HashMap も試しました。オブジェクトを参照する必要があることを知っていましたが、運がなかったからです。誰かが私を助けて眠らせてくれるかしら :D ありがとう!