【发布时间】:2020-04-21 22:06:36
【问题描述】:
我有一个第三方库,它通过侦听器接口公开其功能。该库的要求是它在自定义 Android 应用程序类的 onCreate 中进行初始化。
public class CustomApplicationWithListener extends Application implements ThirdPartyListener {
public void onCreate() {
if(feature.isTurnedOn()){
// the library requires an application instance of type ThirdPartyListener
init(this);
}
}
}
我试图将这个功能隐藏在一个特性标志后面,并且想知道是否有一种方法可以从应用程序类中抽象出监听器,并且只在需要该特性时才定义它。只有这样我们才声明该接口。我知道需要在清单中定义自定义应用程序类。有没有办法在运行时动态决定是否启用该功能,然后使用如下所示的第三方侦听器初始化基本自定义应用程序对象,并让主清单知道我们将要使用的版本?
var application: Application?
if(feature.isTurnedOn()){
application = CustomApplicationWithListener()
} else {
application = CustomApplication
}
【问题讨论】:
-
你到底想达到什么目的?您的目标是在运行时切换它还是使用单个代码库拥有两个版本的应用?
-
在 Android 9.0 及更高版本上,您可以使用
AppComponentFactory创建您的Application的自定义实例。但是,由于您的应用程序的其余部分未设置,您将不知道功能标志值是什么。为什么你让你的Application类实现这个接口,而不是让它在其他对象上实现? -
如果我在其他类中实现接口,我会得到一个运行时异常,说该库需要在应用程序 oncreate 中初始化,并且需要一个侦听器类型的应用程序实例!通过此处的功能标志,我正在读取客户端上的标志,我没有达到任何端点来决定是否要显示该特定功能。它是一个编译时标志
-
@CommonsWare Android 9.0 之前的版本支持
AppComponentFactory -
@luckysing_noobster:不,抱歉。
标签: java android oop kotlin android-application-class