这个问题是关于打破堆栈跟踪和反射的字节码级内嵌优化。
我有一个包含许多静态工厂的库来创建对象。该类只有静态方法,如
public class FruitC {
public static Appple createApple(AppContext ac, AppleParameters...) {
//stuff using AppContext to create apple use parameters
return apple;
}
代码电话
FruitC.createApple(AppContext ac, AppleParameters...)
最初的想法是使用这样的设计以允许简单的内嵌,以便优化器可以完全删除静态类,因为在内联类之后,FruitC将是空的。
但是你不能覆盖静态方法,你需要将Context in参数传递给工厂方法,并且在编码时它看起来很丑陋
所以现在的想法是为每个静态工厂创建一个非静态类。 非静态类由Application上下文
初始化public class FruitFactory {
private AppContext ac;
public FruitFactory(AppContext ac) {
this.ac = ac;
}
public Apple createApple(AppleParameters...) {
return FruitC.createApple(ac, AppleParameters...)
}
此设计允许在需要时进行扩展。但是,默认工厂可以推测内联,并且在优化后完全删除了FruitFactory和FruitC类。
是否有一个可以删除FruitFactory和FruitC的优化工具?
智能优化器必须能够检测到AppContext是一个对象,其引用在应用程序生命期间写入ONCE,然后永远不会更改。
ProGuard能够做到吗?
此优化必须在java字节代码级别完成,因为必须将其发送到Android或其他平台。