将Android应用程序转换为库时的复杂性

时间:2015-07-24 06:26:01

标签: java android aar

我有一个广泛使用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。

2 个答案:

答案 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);
}

}

现在您可以在库中使用上下文。