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 つと次の 1 つが異なるパッケージに書き込まれます)。

この 3 番目のクラスでは、MyBinder.letsgo(); を呼び出すだけです。

私が直面している問題、およびそれ以来解決しようとしている問題は... 8/9 時間は次のとおりです。2番目のパッケージでletsgo()を実行すると機能しますが、同じパッケージでコールバックを起動するだけです。最初のパッケージで実行した場合も同じです。

WeakHashMap の代わりに HashMap も試しました。オブジェクトを参照する必要があることを知っていましたが、運がなかったからです。誰かが私を助けて眠らせてくれるかしら :D ありがとう!

4

0 に答える 0