4

Android でかなりの数の動作を観察しています (私は multidex の問題に取り組んでいるため、4.4.4 でエミュレーターを使用しています)。

Androidでは、クラス ローダーによってロードされるときにクラスが解決されることは想定されていません。しかし、クラスを作成すると:

public class M {
  public Foo m(String i) {
    switch (i) {
      case "0":
        return new Foo();
      case "1":
        return new Foo2();
    }
    return null;
  }
}

アプリをデバッグし、ウォッチを追加します。

getClass().getClassLoader().findLoadedClass("Foo")
getClass().getClassLoader().findLoadedClass("Foo2")

次に、読み込みMが読み込まFooれ、Foo2!

したがって、クラス解決されます。

不思議なことに、それはほぼ 2 番目の質問ですが、 を追加するM extends Applicationと、Mインスタンス化してもまったく解決されません。が呼び出されたときにのみ JVM にロードされます ( は、FooFoo2場合にロードされます) 。m(X)FooX"0"Foo2X="1"

ここにいる誰かが、これらの根底にある質問について合理的な説明を持っていますか?

  • なぜ解決されるのかM、クラスは解決されるべきではありません。インスタンス化してもMロードしないでくださいFooor at least Foo2.
  • Applicationクラス拡張の動作が異なるのはなぜですか?
  • 別の方法で動作する他の A​​ndroid クラスはありますか?
4

0 に答える 0