我有一个广泛使用ApplicationContext的Android应用程序(比如说MyApp)。 ApplicationContext通过扩展Application的类提供。
class MyApp extends Application {
static Context mContext = null;
public void onCreate() {
mContext = getApplicationContext();
}
public static Context getContext() {
return mContext;
}
}
我想将此应用程序转换为库并在另一个应用程序中使用它(例如,AnotherApp)。现在我看到AnotherApp已经有了一个类似的类,它扩展了Application并在其自身内部提供了它的上下文。当我将MyApp作为库移动到AnotherApp时,我的代码将无法再获得ApplicationContext
- 因为只有一个类可以在Manifest中声明(android:name=".AnotherApp"
)
在库中提供应用程序上下文的最佳方法是什么?我不介意进行大量的代码更改,但想了解我的选项 - 除了将上下文传递给我的库中的每个api。
答案 0 :(得分:0)
库永远不应该使用它适用于主程序的getApplicationCOntext
。
您可以使用函数传递上下文,或者在开头将其保存到类中的公共静态变量中。
关于代码设计的注意事项
这完全取决于您希望如何使用库,这些功能是否会在主应用程序中使用?活动是否会被直接调用?以及其他一些代码设计之类的东西。
如果您想要两个活动,有时最好的方法是将它们分成单独的应用程序,并使用Intent调用另一个。就像使用谷歌地图和其他内置服务一样。
如果要在主应用程序中使用库的功能,则根本不应创建活动。相反,你应该创建一个用户可以继承的抽象类,并通过它来使用你的类。
答案 1 :(得分:0)
我在我的应用程序中做了类似的事情。
真的,你无法在你的图书馆中获得上下文 您将只拥有AnotherApp的上下文 如果你想在你的库中使用Context,你需要有一些方法可以将你的AnotherApp的上下文传递给你的库。
例如
class MyApp extends Application {
static Context mContext = null;
public void onCreate() {
mContext = getApplicationContext();
objecofYourLibClass = new MyApp();
objecofYourLibClass.yourMethod(mContext);
}
}
现在您可以在库中使用上下文。