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 にロードされます ( は、Foo
のFoo2
場合にロードされます) 。m(X)
Foo
X
"0"
Foo2
X="1"
ここにいる誰かが、これらの根底にある質問について合理的な説明を持っていますか?
- なぜ解決されるのか
M
、クラスは解決されるべきではありません。インスタンス化してもM
ロードしないでくださいFoo
orat least Foo2
. Application
クラス拡張の動作が異なるのはなぜですか?- 別の方法で動作する他の Android クラスはありますか?