扩展MultiDexApplication和MultiDex.install(this)有什么区别?

时间:2018-11-15 07:53:29

标签: android multidex

从文档中,我读到有两种方法可以在API 21以下的设备中支持MultiDex:

  1. 让Application类扩展MultiDexApplication,并且
  2. 万一应用程序扩展了其他内容,请在Application类的MultiDex.install(this)函数中使用onAttachBaseContext(Context base)

默认情况下,它们与在MultiDexApplication中扩展MultiDex.install(this)调用onAttachBaseContext()基本上是相同的,还是两种方法之间有区别?

3 个答案:

答案 0 :(得分:2)

有两种方法可以为您的应用启用multidex,它们是完全相同的

如果您只想为启用Multidex的应用程序创建类,则可以将MultiDexApplication作为应用程序名称放在AndroidManifest中,而无需做更多事情,因为在MultiDexApplication中覆盖了attachBaseContext(),请看:

public class MultiDexApplication extends Application {
    public MultiDexApplication() {
    }

    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        MultiDex.install(this);
    }
}

并且如果您的应用程序类结尾仅是Application扩展,那么您也可以将扩展名更改为MultiDexApplication而不是ovverride attachBaseContext()方法,否则您的应用程序类不是从Application扩展的,因此您必须覆盖attachBaseContext( )和您的自定义应用程序类

答案 1 :(得分:0)

就像您提到的那样,这是解决“单个”问题的两种“不同”方法

在某些情况下,第一种方法(即扩展MultiDexApplication)的问题可能不会发生。就像您想用某个库中的其他基类扩展您的应用程序。 由于Java不支持多重继承,因此Android提供了另一种解决此问题的方法,即“ MultiDex.install(this)”

答案 2 :(得分:0)

在某些项目中,您可能无法执行Application类扩展MultiDexApplication(例如,如果您的Application已经扩展了其他类)。在这种情况下,您可以在Application类中使用MultiDex.install(this)。