Android类解析中的陌生事物
我在Android上观察了很多行为(我正在研究multidex问题,所以我在4.4.4中使用了一个模拟器)让我对Android类加载无言以对:
在类加载器加载时, 不应该解析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
!
所以课程得到了解决。
奇怪的是,这几乎是第二个问题,但是如果我添加M extends Application
,那么M
根本就不会被解析,即使实例化它也是如此。 当调用m(X)
时, Foo
和Foo2
仅被加载到JVM中m(X)
当X
为"0"
时加载Foo
,对于X="1"
加载Foo2
)。
这里有没有人对这些基本问题有合理的解释:
- 为什么
M
解决了,不应该解决类。 即使实例化M
也不应加载Foo
或at least Foo2
。 - 为什么扩展
Application
的类表现不同? - 是否有其他Android类以不同的方式运行?