我知道appcompat库为在早期版本的Android下运行的应用程序提供了额外的功能,而不是应用程序的目标级别。我的问题是,如果我在设备上检测到早期版本的Android,如果我从未调用任何方法,那么是否需要包含appcompat库。换句话说,appcompat库是否具有较晚类的存根以防止Dalvik动态类加载器崩溃,或者如果类未被动态引用则不需要那些类?如果从未使用其功能,是否需要appcompat?
// Will Android/Dalvik barf if this class is loaded on a pre-Honeycomb device?
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
ActionBar actionBar = getActionBar();
}
如果您尝试加载不存在的类,它会崩溃。兼容性库没有存根。他们定义了新的版本'android.support.v7.app.ActionBar'与'android.app.ActionBar',可能在内部重定向到本地实现,如果有这样的事情。 – zapl
@zapl,谢谢。只有动态引用的类才会被加载,而不是如果类文件包含的引用永远不会被执行? –
类加载在需要时发生,例如你访问一个类的静态字段/常量/方法或者创建一个实例。例如,在http://en.wikipedia.org/wiki/Initialization-on-demand_holder_idiom中使用(ab) – zapl