Из документации я прочитал, что есть два способа поддержки MultiDex на устройствах ниже API 21:
MultiDexApplication
, иMultiDex.install(this)
в функции класса приложения onAttachBaseContext(Context base)
в случае, если приложение расширяет что-то еще. Они в основном одинаковы с расширением MultiDexApplication
вызывая MultiDex.install(this)
в onAttachBaseContext()
по умолчанию, или есть различия между обоими методами?
это два способа включить мультидекс для вашего приложения, и они абсолютно одинаковы
если вы хотите создать класс для приложения только для включения multidex, вы можете просто поместить MultiDexApplication для имени приложения в AndroidManifest и не нужно делать больше, потому что в MultiDexApplication переопределяется метод attachBaseContext(), посмотрите:
public class MultiDexApplication extends Application {
public MultiDexApplication() {
}
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
}
и если у вас есть конец класса приложения, он расширяет только приложение, вы также можете изменить расширяет на MultiDexApplication вместо метода ovverride attachBaseContext(), в противном случае у вас есть класс приложения, который не расширяется из Application, поэтому вы должны переопределить метод attachBaseContext() и ваш пользовательский класс приложения
Как вы упомянули, это два "разных" подхода для решения "одной" проблемы
Проблема с первым подходом (то есть расширением MultiDexApplication) может быть невозможна в некоторых случаях. как вы хотите расширить свое приложение с другим базовым классом из некоторой библиотеки. Поскольку множественное наследование не поддерживается в Java, Android предоставила другой способ решения проблемы, а именно "MultiDex.install(this)"
В некоторых проектах у вас может не быть возможности сделать класс приложения расширяет MultiDexApplication (например, если ваше приложение уже расширяет какой-то другой класс). В этом случае вы можете использовать MultiDex.install(this) в вашем классе Application.